我需要更改此项;
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_position
和nth_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