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
格式化它
我正在研究 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 和以前一样 - 用空字符串替换逗号
- inner 检查源字符串是否包含逗号
to_number
把这样的字符串转成数字- 除以
100
to_char
格式化它