Как получить строку между четвертой и пятой косой чертой (/) в Oracle без использования регулярных выражений - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть строка, как показано ниже

/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 и т. д. ??

Я новичок в оракуле, не могли бы вы помочь мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Используя старую комбинацию 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-го слеша - в результате получается длина строки, которую нужно извлечь.
1 голос
/ 09 апреля 2019

вот быстрое решение с 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
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...