plsql如何截取字符串中通过符号截取它的左边右边

Dotakus 2016-04-05 03:45:09
我有一段字符串‘1111\2222\3333\4444’

我现在只想截取到‘3333’

请问要怎么办

在线等, 好心人帮下忙啊,
...全文
5055 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dotakus 2016-04-07
  • 打赏
  • 举报
回复
先谢谢各位的方法,我试了,是可以截取到我要的第三个x的, 我现在在根据具体情况在改,谢谢给位啦~~
bo871747022 2016-04-06
  • 打赏
  • 举报
回复
用instr的到第2和第三个‘\‘的位置,再用substr函数截取就行。
zy18755122285 2016-04-06
  • 打赏
  • 举报
回复
SELECT substr('1111\2222\3333\4444',11,4) FROM dual
zy18755122285 2016-04-06
  • 打赏
  • 举报
回复
SELECT substr('1111\2222\3333\4444',11,4) FROM dual
zkzhong 2016-04-06
  • 打赏
  • 举报
回复
select substr('1111\2222\3333\4444',instr('1111\2222\3333\4444','\',1,2)+1,instr('1111\2222\3333\4444','\',1,3)-instr('1111\2222\3333\4444','\',1,2)-1) from dual; 可以看看,主要的想法是:instr('1111\2222\3333\4444','\',1,2),instr('1111\2222\3333\4444','\',1,3)取得第二'\'和第三个'\'的位置相减再减1,得到3333处字符长度,instr('1111\2222\3333\4444','\',1,2)+1找到开始截取的位置。
chengccy 2016-04-05
  • 打赏
  • 举报
回复
正则 with table1 as ( select '1111\2222\3333\4444' col1 from dual union all select '1\22\333\4444' col1 from dual ) select col1,regexp_substr(col1,'[^\]+',1,3) from table1
zbdzjx 2016-04-05
  • 打赏
  • 举报
回复
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
引用 4 楼 Dotakus 的回复:
[quote=引用 3 楼 zbdzjx 的回复:] [quote=引用 2 楼 Dotakus 的回复:] [quote=引用 1 楼 zbdzjx 的回复:] 规则要明确!!
新人一个,请问什么规则?[/quote] 就是为什么要取3333,而不是2222或4444。[/quote] 因为我需要啊,业务需要,说的详细些: 有一张表a,其中有一个字段b,b字段中的数据格式为x\x\x\x(可以确定),但是每个x所代表的字符串长度不一定, 现在业务需要一条信息c,但是表中并没有字段可以直接查找出c, 不过这条信息c,在字段b中的第三个x的位置, 所以我现在需要可以截取到第三个x的SQL语句, 不知这样表述够不够详细,,,,[/quote]
xu176032 2016-04-05
  • 打赏
  • 举报
回复
引用 5 楼 zbdzjx 的回复:
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=引用 4 楼 Dotakus 的回复:] [quote=引用 3 楼 zbdzjx 的回复:] [quote=引用 2 楼 Dotakus 的回复:] [quote=引用 1 楼 zbdzjx 的回复:] 规则要明确!!
新人一个,请问什么规则?[/quote] 就是为什么要取3333,而不是2222或4444。[/quote] 因为我需要啊,业务需要,说的详细些: 有一张表a,其中有一个字段b,b字段中的数据格式为x\x\x\x(可以确定),但是每个x所代表的字符串长度不一定, 现在业务需要一条信息c,但是表中并没有字段可以直接查找出c, 不过这条信息c,在字段b中的第三个x的位置, 所以我现在需要可以截取到第三个x的SQL语句, 不知这样表述够不够详细,,,,[/quote][/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的用法,研究研究就懂了
Dotakus 2016-04-05
  • 打赏
  • 举报
回复
引用 3 楼 zbdzjx 的回复:
[quote=引用 2 楼 Dotakus 的回复:] [quote=引用 1 楼 zbdzjx 的回复:] 规则要明确!!
新人一个,请问什么规则?[/quote] 就是为什么要取3333,而不是2222或4444。[/quote] 因为我需要啊,业务需要,说的详细些: 有一张表a,其中有一个字段b,b字段中的数据格式为x\x\x\x(可以确定),但是每个x所代表的字符串长度不一定, 现在业务需要一条信息c,但是表中并没有字段可以直接查找出c, 不过这条信息c,在字段b中的第三个x的位置, 所以我现在需要可以截取到第三个x的SQL语句, 不知这样表述够不够详细,,,,
zbdzjx 2016-04-05
  • 打赏
  • 举报
回复
引用 2 楼 Dotakus 的回复:
[quote=引用 1 楼 zbdzjx 的回复:] 规则要明确!!
新人一个,请问什么规则?[/quote] 就是为什么要取3333,而不是2222或4444。
Dotakus 2016-04-05
  • 打赏
  • 举报
回复
引用 1 楼 zbdzjx 的回复:
规则要明确!!
新人一个,请问什么规则?
zbdzjx 2016-04-05
  • 打赏
  • 举报
回复
规则要明确!!

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧