gpt4 book ai didi

oracle - SQL regexp - 替换两个数字之间的点

转载 作者:行者123 更新时间:2023-12-02 04:51:48 26 4
gpt4 key购买 nike

我需要改变这个;

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;

will return;

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;

will return;

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

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

但是当两个捕获组共享一个数字时仍然存在问题,这是由于重叠( same issue as this ),并且需要先行来解决,但不能在 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;

will be the correct result;

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

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

关于oracle - SQL regexp - 替换两个数字之间的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53301654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com