2012-06-12 17 views
2

我想使用Oracle REGEXP_REPLACE從字符串中刪除一些點。 如果存在,我必須從第二個點中刪除。 例如:從第一個字符串中除去所有的點,使用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; 

的問題是,我查詢只是兩個點做。如果字符串有兩個以上的點,我必須修改查詢以接受更多的點等。 有沒有辦法自動做到這一點?

感謝

回答

2

一個更多鈔票 「髒」 的解決方案

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

,雖然它並不清楚,它的工作原理。

1
SELECT SUBSTR(mystr, 1, INSTR(mystr,'.')) 
     || REPLACE(SUBSTR(mystr, INSTR(mystr,'.')+1),'.') 
FROM my_table; 
相關問題