我有一个如下所示的字符串
/doc/Alldocs/attachment/2345455/122222/0/C/0%20%XYZ%ABC%20K
我需要将字符串放在第四个斜线与第五个斜线之间,这表示2345455
当前我正在使用REGEXP_SUBSTR
来获取结果。
REGEXP_SUBSTR('/doc/Alldocs/attachment/2345455/122222/0/C/0%20%XYZ%ABC%20K', '[^/ ]+', 1, 4)
但这确实会影响性能,在我的数据库中返回结果要花费很长时间。
还有其他方法可以更快地获取此信息吗?像split, Instr
之类的东西?
我是oracle的新手,请您帮我解决这个问题吗?
答案 0 :(得分:1)
这是使用substr
和ìnstr
的快速解决方案
首先,您可以获得一个字符串/doc/Alldocs/attachment/2345455
substr(str, 1, length(substr(str,1,instr(str,'/',1,5)))-1)
比字符串的第一部分更重要
with tab as(
select '/doc/Alldocs/attachment/2345455/122222/0/C/0%20%XYZ%ABC%20K' as str from dual
)
select substr(
substr(str, 1, length(substr(str,1,instr(str,'/',1,5)))-1)
,instr(str,'/',1,4)+1)
from tab
答案 1 :(得分:1)
照常使用旧的SUBSTR
+ INSTR
组合。
SQL> with test (col) as
2 (select '/doc/Alldocs/attachment/2345455/122222/0/C/0%20%XYZ%ABC%20K' from dual)
3 select substr(col, instr(col, '/', 1, 4) + 1,
4 instr(col, '/', 1, 5) - instr(col, '/', 1, 4) - 1
5 ) result
6 from test;
RESULT
-------
2345455
SQL>
INSTR
搜索第四个斜杠INSTR
搜索第5个斜杠的位置并减去第4个斜杠的位置-结果是要检索的字符串的长度。