У меня есть строка, как показано ниже
/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
и т. д. ??
Я новичок в оракуле, не могли бы вы помочь мне решить эту проблему?
вот быстрое решение с 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
ищет четвертую косую чертуINSTR
ищет 5-ю позицию косой черты и вычитает позицию 4-й косой черты - результатом является длина строки, которую нужно получить.