如何在不使用正则表达式的情况下在oracle中获取介于第四个和第五个斜杠(/)之间的字符串

时间:2019-04-09 06:24:27

标签: oracle oracle11g plsqldeveloper

我有一个如下所示的字符串

/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的新手,请您帮我解决这个问题吗?

2 个答案:

答案 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个斜杠的位置-结果是要检索的字符串的长度。