Источник: http://plsqlbook.ru/category/question-answer/
Простой пример того, о чем речь:
напоминалка:
SELECT regexp_substr(str, '[^#]+', 1, LEVEL) FROM (SELECT 'one#two#tree' str FROM dual) CONNECT BY instr(str, '#', 1, LEVEL-1) > 0
- ‘[^#]+’ такая маска найдет все символы кроме решетки
- instr(str, ‘#’, 1, LEVEL-1) > 0 поиск позиции разделителя начиная с первой позиции и, видимо, с LEVEL = 2 (возвратит 0 если позиция при заданных параметрах не найдена)
- CONNECT BY условие подсказывает ораклу как долго продолжать цикл
1 one 2 two 3 tree
Вариант 2
select ltrim(rtrim( substr(s_element, instr(s_element,',',1,iter.pos)+1, instr(s_element,',',1,iter.pos+1)- instr(s_element,',',1,iter.pos)),',')) s_element,iter.pos
from (select ','||s_in||',' s_element from dual) csv, (select rownum pos from ra_customer_trx_all) iter
where iter.pos <= ((length(csv.s_element)-length(replace(csv.s_element,',')))/length(','))-1
где s_in - исходная строка
Этот комментарий был удален автором.
ОтветитьУдалить