SQL 出现字符替换问题

SQL Occurence character Replace issue

我正在研究 Oracle 的 SQL,我希望得到以下结果:

4,500,400,40 --> 4 500 400,40

5400200,00   --> 5 400 200,00

1200,988,00  --> 1 200 988,00

我尝试使用 REGEXP_REPLACE 但没有结果,所以如果有人能帮助我,那就太好了。

谢谢。

这是一种选择:

SQL> with test (col) as
  2    (select '4,500,400,40' from dual union all
  3     select '5400200,00'   from dual union all
  4     select '1200,988,00'  from dual union all
  5     select '28 200 600,5' from dual union all
  6     select '40 500 600'   from dual
  7    )
  8  select col,
  9  to_char(
 10    to_number(  replace(  replace(case when instr(col, ',') = 0 then col ||',00'
 11                                       else col
 12                                  end,
 13                                  ' ', ','
 14                                 ),
 15                          ',', ''
 16                        )
 17             ) / 100,
 18                 'fm999G999G999G990D00',
 19                 'nls_numeric_characters = '', '''
 20                ) result
 21  from test;

COL          RESULT
------------ -------------------
4,500,400,40 4 500 400,40
5400200,00   5 400 200,00
1200,988,00  1 200 988,00
28 200 600,5 2 820 060,05
40 500 600   40 500 600,00

SQL>

它有什么作用(现在变得更复杂了)?

  • 嵌套REPLACE
    • inner 检查源字符串是否包含逗号,字符;如果不是,则附加 ,00 后缀(用于 '40 500 600' 之类的值)
    • outer 和以前一样 - 用空字符串替换逗号
  • to_number把这样的字符串转成数字
  • 除以100
  • to_char 格式化它