2017-02-24 4 views

답변

2
select column_value, 
    regexp_substr(column_value, '([^:]*:){3}([^|]*)\|', 1, 1, null, 2) as str 
from (
     select 'D:5:testps:12345|blah blah/blah' as column_value from dual union all 
     select 'XD:5:testps:12345|blahblah/blah' as column_value from dual 
    ) 
where column_value like 'D%' 
; 

COLUMN_VALUE      STR 
------------------------------- ----- 
D:5:testps:12345|blah blah/blah 12345 
0

당신은 regex_replace 사용할 수 있습니다

select case when col like 'D%' 
      then regexp_replace(col, '^([^:]*:){3}(\d+)\|.*', '\2') num 
     end 
from t; 

가 생산 :

12345 

안부가 D로 시작하지 않는 경우가 null 생산

+0

무엇 것이다 않는 문자열이 반환 D로 시작하지 않습니까? (나는 OP가 아무것도 리턴하지 않았다고 생각합니다 - 심지어 NULL도 아닙니다.) NULL은 여전히 ​​D로 시작하는 문자열에서 유효한 리턴입니다! – mathguy