Oracle
 sql >> база данни >  >> RDS >> Oracle

Разделете String на редове Oracle SQL

Това трябва да свърши работа:

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

Забележете как използвах regexp_substr в клаузата за свързване също. Това е за справяне със случая на множество интервали.

Ако имате предсказуема горна граница на броя на елементите на ред, може да си струва да сравните ефективността на рекурсивната заявка по-горе с просто 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;

Вижте http://sqlfiddle.com/#!4/444e3/1 за демонстрация на живо



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво представляват PLSQL записи в Oracle

  2. Изберете от таблицата, ако записът е намерен в друга таблица

  3. Използване на Oracle JDeveloper 12c с Oracle Database, част 1

  4. TNS-12505:TNS:слушателят в момента не знае за SID, даден в дескриптора на свързване

  5. ORA-00918:колона двусмислено дефинирана в SELECT *