Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Podziel ciąg na wiersze Oracle SQL

To powinno wystarczyć:

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

Zwróć uwagę, jak użyłem regexp_substr również w klauzuli connect by. Ma to na celu rozwiązanie przypadku wielu spacji.

Jeśli masz przewidywalną górną granicę liczby elementów w wierszu, warto porównać wydajność powyższego zapytania rekurencyjnego z prostym 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;

Zobacz http://sqlfiddle.com/#!4/444e3/1 demonstrację na żywo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja COSH() w Oracle

  2. Kolejna biała księga Optymalizatora 12c

  3. Uzyskaj identyfikator wstawki w tym samym oświadczeniu

  4. Jak uzyskać BLOB z pliku w PL/SQL?

  5. Przeszukać bazę danych Oracle w poszukiwaniu tabel z określonymi nazwami kolumn?