SQL regexp - 替换两个数字之间的点
SQL regexp - replace dots between two numbers
我需要改变这个;
J S49-1:7.5-190 d.
到此;
J S49-1:7,5-190 d.
将所有点替换为逗号,但仅限于数字之间。
使用REGEXP_SUBSTR的一种方式:
select REGEXP_SUBSTR('J S49-1:7.5-190 d','[^.]+',1,1)||','||REGEXP_SUBSTR('J S49-1:7.5-190 d','[^.]+',1,2) from dual;
这里是 regexp_replce
select REGEXP_REPLACE('J S49-1:7.5-190 d','[.*]',',') from dual
在 REGEXP_REPLACE
内使用捕获组;
select REGEXP_REPLACE('J S49-1:7.5-190 d.', '(.*\d)\.(\d.*)', ',') from dual;
will return;
J S49-1:7,5-190 d.
但是如果数字之间出现多次句点,这将不起作用。
如果数字之间出现不止一次句点
我能够用捕获组触发多重替换;
select REGEXP_REPLACE('J S49-1:7.557.8-190 d.', '(\d)\.(\d)', ',', 1, 0) from dual;
will return;
J S49-1:7,557,8-190 d.
最后两个参数是; start_position
和 nth_appearance
,要替换所有出现的地方,nth_appearance
值必须是 0
但是当两个capture groups共享一个数字的时候还是有问题,这是因为overlapping(same issue as this),需要lookahead才能解决,但是在oracle中不能使用,hmmm。
如果数字之间出现不止一次句点,并且两次出现之间共享相同的数字
一个解决方案是应用辅助 REGEXP_REPLACE
我已经分享了两次,所以任何重叠的情况都将在第二个 运行;
中涵盖
select REGEXP_REPLACE(
REGEXP_REPLACE('J S49-1:7.5.8.7-190 d.', '(\d)\.(\d)', ',', 1, 0),
'(\d)\.(\d)', ',', 1, 0) from dual;
will be the correct result;
J S49-1:7,5,8,7-190 d.
有关 REGEXP_REPLACE
的更多详细信息,请查看 here
我需要改变这个;
J S49-1:7.5-190 d.
到此;
J S49-1:7,5-190 d.
将所有点替换为逗号,但仅限于数字之间。
使用REGEXP_SUBSTR的一种方式:
select REGEXP_SUBSTR('J S49-1:7.5-190 d','[^.]+',1,1)||','||REGEXP_SUBSTR('J S49-1:7.5-190 d','[^.]+',1,2) from dual;
这里是 regexp_replce
select REGEXP_REPLACE('J S49-1:7.5-190 d','[.*]',',') from dual
在 REGEXP_REPLACE
内使用捕获组;
select REGEXP_REPLACE('J S49-1:7.5-190 d.', '(.*\d)\.(\d.*)', ',') from dual;
will return;
J S49-1:7,5-190 d.
但是如果数字之间出现多次句点,这将不起作用。
如果数字之间出现不止一次句点
我能够用捕获组触发多重替换;
select REGEXP_REPLACE('J S49-1:7.557.8-190 d.', '(\d)\.(\d)', ',', 1, 0) from dual;
will return;
J S49-1:7,557,8-190 d.
最后两个参数是; start_position
和 nth_appearance
,要替换所有出现的地方,nth_appearance
值必须是 0
但是当两个capture groups共享一个数字的时候还是有问题,这是因为overlapping(same issue as this),需要lookahead才能解决,但是在oracle中不能使用,hmmm。
如果数字之间出现不止一次句点,并且两次出现之间共享相同的数字
一个解决方案是应用辅助 REGEXP_REPLACE
我已经分享了两次,所以任何重叠的情况都将在第二个 运行;
select REGEXP_REPLACE( REGEXP_REPLACE('J S49-1:7.5.8.7-190 d.', '(\d)\.(\d)', ',', 1, 0), '(\d)\.(\d)', ',', 1, 0) from dual;
will be the correct result;
J S49-1:7,5,8,7-190 d.
有关 REGEXP_REPLACE
的更多详细信息,请查看 here