2014-09-30 40 views
1

我正在尋找一種方法來通過SQL獲取每個字符串的第二個值。 我的字符串如下所示: 12:115:22:98 ,我想獲得每2值超出它,在這種情況下,115和98oracle SQL:獲取每個字符串的第二個值

與REGEXP_SUBSTR各地試過,但最好我能做到是讓這個每個值:

select regexp_substr('3:113:1:14','[^ :]+', 2, level) 
     from dual 
connect by regexp_substr('3:113:1:14','[^ :]+', 2, level) 
     is not null; 

或只是第二個值與此:

select regexp_substr('3: 113:1:14','[^ :]+', 2, 1) 
     from dual; 

有沒有辦法或許另一個函數來得到這個工作?

由於提前, WOD

編輯:

它也將有可能使該字符串是這樣的:

4-116:3-113:22-12 

回答

2

您已經所以非常非常接近...

select * from(
select regexp_substr('3:113:1:14:5:6:7:8','[^ :]+', 2, level), level lvl 
     from dual 
connect by regexp_substr('3:113:1:14:5:6:7:8','[^ :]+', 2, level) 
     is not null 
) where mod(lvl,2)=1; 
+0

非常感謝快速回復,工作正常(我喜歡它背後的想法,因爲它看起來很簡單:)) – Wod 2014-09-30 11:44:01

0

使用正常的SUBSTR a nd INSTR

SQL> WITH DATA AS 
    2 (SELECT '12:115:22:98' STR FROM DUAL 
    3 UNION ALL 
    4 SELECT '3:113:1:14' FROM DUAL 
    5 ) 
    6 SELECT SUBSTR(STR, INSTR(STR,':',1,1)+1, INSTR(STR,':',1,2)-INSTR(STR,':',1,1)-1) 
    7 ||'-' 
    8 || SUBSTR(STR, INSTR(STR,':',1,3)+1) 
    9 ||':' 
10 ||str str 
11 FROM data 
12/

STR 
-------------------------------------- 
115-98:12:115:22:98 
113-14:3:113:1:14 
相關問題