sql >> データベース >  >> RDS >> Oracle

文字列を行に分割するOracleSQL

    これでうまくいくはずです:

    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を参照してください



    1. LinuxにSQLServerをインストールする方法

    2. 別のSQLServer上の別のデータベースにテーブルをコピーします

    3. 大きなテーブルでのSQLServerクエリのパフォーマンスを向上させる

    4. MariaDB Xpand(以前のClustrixDB)の概要