2

我想使用 Oracle REGEXP_REPLACE 从字符串中删除一些点。如果存在,我必须从第二个点中删除。例如:

4       => 4
5       => 5
5.1     => 5.1
5.1.1   => 5.11
5.1.2   => 5.12
5.1.2.1 => 5.121
5.1.2.2 => 5.122
6       => 6

我有这个

select REGEXP_REPLACE(num, '(\d+)(\.)(\d+)(\.)(\d+)', '\1.\3\5')
from my_table;

问题是我的查询只针对两个点。如果字符串有两个以上的点,我必须修改查询以接受更多的点等等。有没有办法自动做到这一点?

谢谢

4

2 回答 2

2

一个可能的“肮脏”解决方案

select REGEXP_REPLACE(num, '(\d+)(\.)(.*)', '\1\2') || 
       REPLACE( REGEXP_REPLACE(num, '(\d+)(.*)', '\2') ,'.','') 
from my_table;

虽然还不清楚,但它确实有效。

于 2012-06-12T18:20:19.020 回答
1
SELECT SUBSTR(mystr, 1, INSTR(mystr,'.'))
       || REPLACE(SUBSTR(mystr, INSTR(mystr,'.')+1),'.')
FROM my_table;
于 2012-06-13T07:29:09.547 回答