Това трябва да свърши работа:
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 за демонстрация на живо