SQL正则表达式-替换两个数字之间的点



我需要更改此项;

J S49-1:7.5-190 d.

对此;

J S49-1:7,5-190 d.

将所有点替换为逗号,但仅限于数字之间。

具有REGEXP_REPLACE内的捕获组;

select REGEXP_REPLACE('J S49-1:7.5-190 d.', '(.*d).(d.*)', '1,2') from dual;

将返回;

J S49-1:7,5-190 d.

但如果数字之间多次出现句点,则这将不起作用。

如果数字之间出现多个周期

我能够触发多替换与捕获组;

select REGEXP_REPLACE('J S49-1:7.557.8-190 d.', '(d).(d)', '1,2', 1, 0) from dual;

将返回;

J S49-1:7,557,8-190 d.

最后两个参数是;start_positionnth_appearance,若要替换所有出现,nth_appearance值必须为0

但是,当两个捕获组共享一个数字时,仍然存在一个问题,这是由于重叠(与此问题相同(,需要提前解决,但无法在oracle中使用,嗯。

如果数字之间出现多个句点,并且两次出现时共享相同的数字

一种解决方案是应用我已经共享了两次的次要REGEXP_REPLACE,因此任何重叠的情况都将在第二次运行中涵盖;

select REGEXP_REPLACE(
                 REGEXP_REPLACE('J S49-1:7.5.8.7-190 d.', '(d).(d)', '1,2', 1, 0), 
                 '(d).(d)', '1,2', 1, 0) from dual;

将是正确的结果;

J S49-1:7,5,8,7-190 d.

有关REGEXP_REPLACE的更多详细信息,请查看此处

使用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

最新更新