sql >> Database >  >> RDS >> Oracle

String splitsen in rijen Oracle SQL

Dit zou moeten werken:

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

Merk op hoe ik regexp_substr . heb gebruikt ook in de connect by-clausule. Dit is om te gaan met het geval van meerdere spaties.

Als je een voorspelbare bovengrens hebt voor het aantal items per regel, is het misschien de moeite waard om de prestaties van de recursieve zoekopdracht hierboven te vergelijken met een simpele CROSS JOIN :

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;

Zie http://sqlfiddle.com/#!4/444e3/1 voor een live demo



  1. JSON_STORAGE_SIZE() - Vind de opslaggrootte van een JSON-document in MySQL

  2. Hoe AT TIME ZONE werkt in PostgreSQL

  3. MySQL AWS-prestaties 2x verbeteren via Amazon RDS tegen dezelfde kosten

  4. SQL Server-instantie consolideren door clustering en stapeling