17,377
社区成员
发帖
与我相关
我的任务
分享
with table1 as
(
select '1111\2222\3333\4444' col1 from dual union all
select '1\22\333\4444' col1 from dual
)
select col1, substr(col1, instr(col1, '\', 1, 2)+1, instr(col1, '\', 1, 3)-instr(col1, '\', 1, 2)-1) col2 from table1
新人一个,请问什么规则?[/quote]
就是为什么要取3333,而不是2222或4444。[/quote]
因为我需要啊,业务需要,说的详细些:
有一张表a,其中有一个字段b,b字段中的数据格式为x\x\x\x(可以确定),但是每个x所代表的字符串长度不一定,
现在业务需要一条信息c,但是表中并没有字段可以直接查找出c,
不过这条信息c,在字段b中的第三个x的位置,
所以我现在需要可以截取到第三个x的SQL语句,
不知这样表述够不够详细,,,,[/quote]
select substr(substr('1111\2222\3333\4444',
0,
instr('1111\2222\3333\4444', '\', -1) - 1),
instr(substr('1111\2222\3333\4444',
0,
instr('1111\2222\3333\4444', '\', -1) - 1),
'\',
-1)+1,
length(substr('1111\2222\3333\4444',
0,
instr('1111\2222\3333\4444', '\', -1) - 1)))
from dual
这玩意写着没啥意思,就是instr和substr的用法,研究研究就懂了