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

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

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

  1. SELECT val, TRUNC(val, 0), MOD(val, 1) - 1
  2. from (
  3. select '8E4' val from dual union
  4. select '8E-4' val from dual union
  5. select '1,234.567' val from dual union
  6. select '1.234' val from dual
  7. );

有办法处理吗?谢谢

t98cgbkg

t98cgbkg1#

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

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

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

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

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

展开查看全部

相关问题