我想使用Oracle REGEXP_REPLACE从String中删除一些点。 如果存在,我必须从第二个点删除。 例如:
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;
问题是我的查询仅针对两个点。如果字符串有两个以上的点,我必须修改查询以接受更多的点等等。 有没有办法自动完成?
由于
答案 0 :(得分:2)
A posible" dirty"溶液
select REGEXP_REPLACE(num, '(\d+)(\.)(.*)', '\1\2') ||
REPLACE( REGEXP_REPLACE(num, '(\d+)(.*)', '\2') ,'.','')
from my_table;
虽然它一点也不清楚,但它确实有效。
答案 1 :(得分:1)
SELECT SUBSTR(mystr, 1, INSTR(mystr,'.'))
|| REPLACE(SUBSTR(mystr, INSTR(mystr,'.')+1),'.')
FROM my_table;