sql >> Base de Datos >  >> RDS >> Oracle

Convierta una cadena delimitada en filas en Oracle

Riffing de este método para dividir una cadena y permitir valores 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 en la respuesta vinculada, busca cualquier carácter, sin codicia, seguido de la combinación de ~^ (con el signo de intercalación escapado, entonces ~\^ ) o final de línea. El regexp_substr() llamadas también usa los argumentos opcionales para especificar subexpr - por lo que solo obtiene la primera agrupación (.*? ) y no el delimitador en sí, que está en el segundo grupo.

Si desea un elemento específico, eso está aún más cerca de la publicación vinculada:

select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;

REGEX
-----
C~D^E

O mientras hace esto en un procedimiento, use la consulta de conexión para completar una colección y luego elija el elemento que necesita, si va a ver más de uno.