Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Converter string delimitada em linhas no oracle


Rifando este método para dividir uma string enquanto permite nulos:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, level, null, 1) from dual
connect by level < regexp_count('A~^B~^C~D^E','(.*?)(~\^|$)');

REGEXP_SUBS
-----------
A
B
C~D^E

Como na resposta vinculada, ele procura por quaisquer caracteres, não gananciosamente, seguidos pela combinação de ~^ (com o acento circunflexo escapado, então ~\^ ) ou fim de linha. O regexp_substr() as chamadas também usam os argumentos opcionais para especificar subexpr - para que ele receba apenas o primeiro agrupamento (.*? ) e não o próprio delimitador, que está no segundo agrupamento.

Se você deseja um elemento específico, isso está ainda mais próximo do post vinculado:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;

REGEX
-----
C~D^E

Ou como você está fazendo isso em um procedimento, use a consulta connect-by para preencher uma coleção e, em seguida, escolha o elemento que você precisa, se você estiver olhando para mais de um.