2014-09-30 2 views
1

SQL을 통해 문자열의 두 번째 값을 얻는 방법을 찾고 있습니다. 12 : 115 : 22 : 98 을 나는이 경우 REGEXP_SUBSTR과 주위 시도 (115) 및 98oracle SQL : 문자열의 두 번째 값 모두 얻기

에, 그것의 모든 2 차 값을 좀하고 싶습니다,하지만 난 최선을 다해 할 수 내 문자열은 다음과 같습니다 이와

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

하거나 2 값 :

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

이 작업을 얻을 수있는 방법 아니면 다른 기능이 있나요이 가진 모든 값을 얻을 수 있었다? 사전에

감사합니다, 주실 래요

편집 :

또한 문자열은 다음과 같이 할 수있을 것입니다 :

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

0

보통 SUBSTR 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