2012-06-12 2 views
2

String에서 일부 점을 제거하려면 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; 
관련 문제