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

Oracleでクエリされたデータを区切り文字で分割するにはどうすればよいですか?

    これは、(遅い正規表現ではなく)再帰的なサブクエリ因数分解句と単純な文字列関数を使用して実行できます。

    (注:これには、複数の入力行があり、各行をその親と相関させることができないため、各深さで指数関数的に多くの出力行を生成する場合の階層クエリの問題もありません。前の階層レベル。)

    Oracleセットアップ

    CREATE TABLE some_table( some_id, value ) AS
      SELECT 8, 'A1,A2,A3;A4,A5,A6' FROM DUAL UNION ALL
      SELECT 8, 'B1,B2,B3;B4,B5,B6' FROM DUAL UNION ALL
      SELECT 8, 'C1,C2,C3;C4,C5,C6' FROM DUAL;
    

    クエリ

    WITH line_start_end ( some_id, value, startidx, endidx ) AS (
      SELECT some_id,
             value,
             1,
             INSTR( value, ';', 1 )
      FROM   some_table
      WHERE  some_id = 8
    UNION ALL
      SELECT some_id,
             value,
             endidx + 1,
             INSTR( value, ';', endidx + 1 )
      FROM   line_start_end
      WHERE  endidx > 0
    )
    SELECT some_id,
           CASE
           WHEN endidx = 0
           THEN SUBSTR( value, startidx )
           ELSE SUBSTR( value, startidx, endidx - startidx )
           END AS value
    FROM   line_start_end;
    

    出力

    db <> fiddle こちら



    1. mysql挿入プロシージャから挿入IDを取得します

    2. フィールドごとの正規表現一致のMySQLカウント数

    3. MySQLのスクリプトからデータベースを作成する方法

    4. PandasWrite_Frameを使用して結果をcx_OracleのOracleデータベースにエクスポートする方法