SQL регулярное выражение - заменить точки между двумя числами - PullRequest
0 голосов
/ 14 ноября 2018

Мне нужно изменить это;

J S49-1:7.5-190 d.

на это;

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

, заменив все точки запятыми, но только между цифрами.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

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

0 голосов
/ 14 ноября 2018

В одну сторону, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...