これでうまくいくはずです:
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
の使用方法に注目してください connectby句でも。これは、複数のスペースの場合に対処するためです。
1行あたりのアイテム数に予測可能な上限がある場合は、上記の再帰クエリのパフォーマンスを単純な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を参照してください