Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Konvertieren Sie eine Zeichenfolge mit Trennzeichen in Zeilen in Oracle

Riffing dieser Methode zum Aufteilen einer Zeichenfolge unter Zulassen von Nullen:

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

Wie in der verknüpften Antwort wird nicht gierig nach beliebigen Zeichen gesucht, gefolgt von der Kombination von ~^ (mit dem Caret-Zeichen, also ~\^ ) oder Zeilenende. Der regexp_substr() Aufrufe verwendet auch die optionalen Argumente, um subexpr anzugeben - es bekommt also nur die erste Gruppierung (.*? ) und nicht das Trennzeichen selbst, das sich in der zweiten Gruppierung befindet.

Wenn Sie ein bestimmtes Element wünschen, ist das noch näher am verlinkten Beitrag:

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

REGEX
-----
C~D^E

Oder verwenden Sie, während Sie dies in einer Prozedur tun, die Connect-by-Abfrage, um eine Sammlung zu füllen, und wählen Sie dann das Element aus, das Sie benötigen, wenn Sie mehr als eines betrachten.