oracle如何管理科学记数法在同一列中使用千位分隔符

rkttyhzu  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(256)

我有一个导入的数据集与文本列,我必须使用作为数字,并包含许多不同格式的数字。
如果找到千位分隔符,则让oracle自动将文本转换为数字会引发错误
我编写了一个简单的例程来测试oracle转换:

SELECT val, TRUNC(val, 0), MOD(val, 1) - 1
from (
    select '8E4' val from dual union
    select '8E-4' val from dual union
    select '1,234.567' val from dual union
    select '1.234' val from dual
);

有办法处理吗?谢谢

t98cgbkg

t98cgbkg1#

可以使用case表达式在两种格式模型之间进行选择,例如:

to_number(val,
  case when instr(val, 'E') > 0 then '9EEEE' else '999G999G999D99999' end,
  'nls_numeric_characters=.,')

因此,对于您的示例,您可以执行以下操作:

select val, num, trunc(num, 0), mod(num, 1) - 1
from (
  select val,
    to_number(val,
      case when instr(val, 'E') > 0 then '9EEEE' else '999G999G999D99999' end,
      'nls_numeric_characters=.,') as num
  from (
      select '8E4' val from dual union
      select '8E-4' val from dual union
      select '1,234.567' val from dual union
      select '1.234' val from dual
  )
);

| 瓦尔|数量|截断(数量,0)|MOD(数量,1)-1|
| - -|- -|- -|- -|
| 8 E4型|八万元|八万元|-1个|
| 8 E-4型|.0008英寸|第0页| -.9992 |
| 一千二百三十四点五六七|一千二百三十四点五六七|小行星一千二百三十四| -.433 |
| 一点二三四|一点二三四|一个| -.766 |
fiddle

相关问题