如何从Oracle SQL中的科学记数法转换?

如何从Oracle SQL中的科学记数法转换?,第1张

概述我们正在尝试将FastExport创建的文件加载到oracle数据库中. 但是,Float列的导出方式如下:1.47654345670000000000 E010. 如何配置SQL * Loader来导入它. 期望控制脚本看起来像: OPTIONS(DIRECT=TRUE, ROWS=20000, BINDSIZE=8388608, READSIZE=8388608)UNRECOVERABLE 我们正在尝试将FastExport创建的文件加载到oracle数据库中.
但是,float列的导出方式如下:1.47654345670000000000 E010.

如何配置sql * Loader来导入它.

期望控制脚本看起来像:

OPTIONS(DIRECT=TRUE,ROWS=20000,BINDSIZE=8388608,READSIZE=8388608)UNRECOVERABLE LOAD DATA infile 'data/SOME_file.csv'appendINTO table SOME_tablefIElds terminated by ','OPTIONALLY ENCLOSED BY '"' AND '"'trailing nullcols (    float_VALUE             CHAR(38)       "???????????????????",fileD02                 CHAR(5)        "TRIM(:fileD02)",fileD03                 TIMESTAMP      "YYYY-MM-DD HH24:MI:SS.FF6",fileD04                 CHAR(38))

我试过to_number(‘1.47654345670000000000 E010′,’9.99999999999999999999 EEEE’)

Error: ORA-01481: invalID number format model error.

我试过to_number(‘1.47654345670000000000 E010′,’9.99999999999999999999EEEE’)

Error: ora-01722: invalID number

这些是我按照优先顺序提出的解决方案:

> to_number(替换(‘1.47654345670000000000 E010’,”,”))
> to_number(TRANSLATE(‘1.47654345670000000000 E010′,’1′,’1’))

我想知道是否有更好的解决方案.

解决方法 据我所知,没有办法让to_number忽略空间,你无法在sql * Loader中做任何事情来准备它.如果您无法通过预处理文件来删除它,而您建议的文件不是一个选项,那么您必须在某个时候使用字符串函数.我不希望它添加大量的处理,高于to_number无论如何都要做,但我总是尝试它而不是假设任何东西 – 避免字符串函数听起来有点像过早的优化.无论如何,最简单的可能是替换:

select to_number(replace('1.47654345670000000000 E010',' ',''),'9.99999999999999999999EEEE') from dual;

或仅用于显示目的:

column num format 99999999999select to_number(replace('1.47654345670000000000 E010','9.99999999999999999999EEEE') as num from dual         NUM------------ 14765434567

你可以定义自己的函数来略微简化控制文件,但不确定它是否值得.

我想到了另外两个选择. (a)作为varchar加载到临时表中,然后使用to_number(replace())填充实际表;但我怀疑这会有什么改善,可能会更糟糕.或者(b)如果您正在运行11g,请加载到实际表中的varchar列,并将您的数字列设置为应用这些函数的virtual column.

实际上,第三个选项……根本不使用sqlLoader,而是使用CSV文件作为外部表,并从中填充真实表.您仍然需要执行to_number(replace()),但在sqlLoader中执行此 *** 作时可能会发现性能上的差异.当然,差别可能是它更糟糕,但可能值得尝试.

总结

以上是内存溢出为你收集整理的如何从Oracle SQL中的科学记数转换?全部内容,希望文章能够帮你解决如何从Oracle SQL中的科学记数法转换?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1167192.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存