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

String in Zeilen aufteilen Oracle SQL

Das sollte funktionieren:

SELECT DISTINCT ID, regexp_substr("Strings", '[^ ]+', 1, LEVEL)
FROM T
CONNECT BY regexp_substr("Strings", '[^ ]+', 1, LEVEL) IS NOT NULL
ORDER BY ID;

Beachten Sie, wie ich regexp_substr verwendet habe auch in der connect by-Klausel. Dies dient dem Umgang mit mehreren Leerzeichen.

Wenn Sie eine vorhersehbare Obergrenze für die Anzahl der Elemente pro Zeile haben, lohnt es sich möglicherweise, die Leistung der obigen rekursiven Abfrage mit einem einfachen CROSS JOIN zu vergleichen :

WITH N as (SELECT LEVEL POS FROM DUAL CONNECT BY LEVEL < 10)
--                                                       ^^
--                                                 up to 10 substrings
SELECT ID, regexp_substr("Strings", '[^ ]+', 1, POS)
FROM T CROSS JOIN N
WHERE regexp_substr("Strings", '[^ ]+', 1, POS) IS NOT NULL
ORDER BY ID;

Siehe http://sqlfiddle.com/#!4/444e3/1 für eine Live-Demo