Oracle
 sql >> Base de données >  >> RDS >> Oracle

Convertir une chaîne délimitée en lignes dans Oracle

En éliminant cette méthode pour diviser une chaîne tout en autorisant les valeurs nulles :

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

Comme dans la réponse liée, il recherche tous les caractères, non gourmands, suivis de la combinaison de ~^ (avec le caret échappé, donc ~\^ ) ou fin de ligne. Le regexp_substr() appels utilise également les arguments optionnels pour spécifier subexpr - donc il n'obtient que le premier groupement (.*? ) et non le délimiteur lui-même, qui se trouve dans le deuxième groupe.

Si vous voulez un élément spécifique, c'est encore plus proche de la publication liée :

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

REGEX
-----
C~D^E

Ou, comme vous le faites dans une procédure, utilisez la requête connect-by pour remplir une collection, puis sélectionnez l'élément dont vous avez besoin, si vous envisagez d'en consulter plusieurs.