sql >> Database teknologi >  >> RDS >> Oracle

Opdel streng i rækker Oracle SQL

Dette burde gøre tricket:

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

Bemærk, hvordan jeg brugte regexp_substr også i connect by-klausulen. Dette er for at håndtere tilfælde af flere mellemrum.

Hvis du har en forudsigelig øvre grænse for antallet af elementer pr. linje, kan det være værd at sammenligne ydeevnen af ​​den rekursive forespørgsel ovenfor med en simpel 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;

Se http://sqlfiddle.com/#!4/444e3/1 for en live demo



  1. Tjek den plads, der bruges af en tabel i SQL Server

  2. Sådan rettes:Ingen passende driver fundet til jdbc:mysql://localhost/dbname-fejl ved brug af pools?

  3. Gruppering i interval på 5 minutter inden for et tidsinterval

  4. Brug af row_to_json() med indlejrede joinforbindelser