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

SQL-1つの列を複数の列に分割する

    データの一貫性に依存します-単一のスペースが1列目と2列目に表示するものの間の区切り文字であると仮定します:

    WITH TEST_DATA AS
      (SELECT 'LOREM IPSUM' COLUMN_A FROM DUAL)
    
    SELECT SUBSTR(t.COLUMN_A, 1, INSTR(t.COLUMN_A, ' ')-1) AS COLUMN_A,
           SUBSTR(t.COLUMN_A, INSTR(t.COLUMN_A, ' ')+1) AS COLUMN_B
    FROM test_data T;
    

    REGEXで以下のクエリを使用することもできます:

    WITH TEST_DATA AS
       (SELECT 'LOREM IPSUM' COLUMN_A FROM DUAL)
    
    SELECT REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 1, 1) COLUMN_A,
           REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 1, 2) COLUMN_B
    FROM test_data T;
    

    Oracle 10g +は正規表現をサポートしているため、解決する必要のある状況に応じて柔軟性を高めることができます。正規表現の部分文字列メソッドもあります...

    編集: 3つの単語の分割:

    WITH TEST_DATA AS
      (SELECT 'LOREM IPSUM DIMSUM' COLUMN_A FROM DUAL)
    
     SELECT REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 1, 1) COLUMN_A,
         REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 1, 2) COLUMN_B,
         REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 2, 3) COLUMN_C
     FROM test_data T;
    

    参照:



    1. 2つのテーブルを結合するときに1つの結合キーを削除する方法

    2. エラー:未定義のプロパティ$ load

    3. 延期可能で大文字と小文字を区別しない一意性制約

    4. 2022年に練習しなければならないSQLクエリインタビューの質問トップ30