我需要更改它;
J S49-1:7.5-190 d.
对此;
J S49-1:7,5-190 d.
通过用逗号替换所有点,但只能在数字之间。
答案 0 :(得分:4)
在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
但是当两个捕获组共享一个数字时仍然存在问题,这是由于重叠(same issue as this)引起的,需要提前解决,但不能在oracle hmmm中使用。
如果数字之间出现一个以上的句点,并且两次出现之间共享同一数字
一种解决方案是应用我共享过两次的辅助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
的更多信息,请选中here
答案 1 :(得分:2)
使用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