我正在寻找一种通过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
答案 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)
使用普通SUBSTR
和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