пятница, 17 августа 2012 г.

Выборка подстроки, находящейся между двумя произвольными символами

 Исходные данные:

:str  - исходная строка
:a -  первый символ
:b -  второй символ

Вариант 1, придуманный мной:
  
select substr(
     :str,
      instr(:str, :a,1,1)+length(:a),
      instr(:str, :b,1,2)-instr(:str, :a,1,1)-length(:a)
     ) val
     from dual;

Вариант 2, предложен моим коллегой, гораздо более краткий, но отчасти более непонятный:

select regexp_replace(:str, '(.*)\' || :a || '(.*)\' || :b || '(.*)', '\2') from dual

1 комментарий: