oracle SQL:获取字符串的每个第二个值

时间:2014-09-30 10:43:41

标签: sql regex oracle substr

我正在寻找一种通过SQL获取字符串的每个第二个值的方法。 我的字符串看起来像这样:     12:115:22:98 我希望得到每个第二个值,在本例中为115和98。

尝试使用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 个答案:

答案 0 :(得分: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;  

答案 1 :(得分:0)

使用普通SUBSTRINSTR

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