sql >> Databáze >  >> RDS >> Oracle

Rozdělit řetězec do řádků Oracle SQL

Tohle by mělo stačit:

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

Všimněte si, jak jsem použil regexp_substr také ve spojení klauzulí. Toto je řešení případu více mezer.

Pokud máte předvídatelnou horní hranici počtu položek na řádek, možná by stálo za to porovnat výkony výše uvedeného rekurzivního dotazu pomocí jednoduchého 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;

Živé demo naleznete na http://sqlfiddle.com/#!4/444e3/1



  1. Přidejte znak procenta k číslu v MariaDB

  2. 2 způsoby, jak vrátit řádky, které obsahují pouze alfanumerické znaky v MariaDB

  3. Složitosti NULL – 1. část

  4. Jak vybrat n-tý řádek v tabulce databáze SQL?