如何在不使用正则表达式的情况下获取oracle中第四和第五斜杠(/)之间的字符串
How to get string in between forth and fifth slash(/) in oracle without using regular expressions
我有如下字符串
/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)
但这确实影响了性能,在我的数据库中需要很长时间才能 return 结果。
有没有其他方法可以更快地获取此信息?像 split, Instr
之类的东西??
我是 oracle 的新手,你能帮我解决这个问题吗?
这里是 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
像往常一样使用旧的 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
搜索第4个斜杠
- 第二个
INSTR
搜索第5个斜杠位置并减去第4个斜杠的位置-结果是要检索的字符串的长度。
我有如下字符串
/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)
但这确实影响了性能,在我的数据库中需要很长时间才能 return 结果。
有没有其他方法可以更快地获取此信息?像 split, Instr
之类的东西??
我是 oracle 的新手,你能帮我解决这个问题吗?
这里是 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
像往常一样使用旧的 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
搜索第4个斜杠 - 第二个
INSTR
搜索第5个斜杠位置并减去第4个斜杠的位置-结果是要检索的字符串的长度。