С группами захвата в пределах 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
, отметьте здесь