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

リストするカンマ区切りの文字列

    区切り文字列の分割 Oracleドキュメントページのトピック。

    1つは:

    サンプルデータ

    CREATE TABLE table_name ( id, list ) AS
    SELECT 1, 'a,b,c,d' FROM DUAL UNION ALL -- Multiple items in the list
    SELECT 2, 'e'       FROM DUAL UNION ALL -- Single item in the list
    SELECT 3, NULL      FROM DUAL UNION ALL -- NULL list
    SELECT 4, 'f,,g'    FROM DUAL;          -- NULL item in the list
    

    クエリ

    SELECT t.id,
           v.COLUMN_VALUE AS value,
           ROW_NUMBER() OVER ( PARTITION BY id ORDER BY ROWNUM ) AS lvl
    FROM   table_name t,
           TABLE(
             CAST(
               MULTISET(
                 SELECT REGEXP_SUBSTR( t.list, '([^,]*)(,|$)', 1, LEVEL, NULL, 1 )
                 FROM   DUAL
                 CONNECT BY LEVEL < REGEXP_COUNT( t.list, '[^,]*(,|$)' )
               )
               AS SYS.ODCIVARCHAR2LIST
             )
           ) v;
    

    出力

            ID ITEM           LVL
    ---------- ------- ----------
             1 a                1 
             1 b                2 
             1 c                3 
             1 d                4 
             2 e                1 
             3 (NULL)           1 
             4 f                1 
             4 (NULL)           2 
             4 g                3 
    


    1. Pythonは文字列にEを追加します

    2. REGEXP_REPLACE-()で囲まれている場合にのみ、文字列からコンマを削除します

    3. リストするカンマ区切りの文字列

    4. SQLiteでミリ秒を日付に変換する方法