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

ORACLE SQL:日付範囲に基づいて新しい行を作成します

    再帰クエリを使用できます(範囲が何か月に及ぶかに関係なく機能します):

    WITH months ( id, start_date, end_date, final_date ) AS (
      SELECT id,
             start_date,
             LEAST( LAST_DAY( start_date ), end_date ),
             end_date
      FROM   table_name
    UNION ALL
      SELECT id,
             end_date + INTERVAL '1' DAY,
             LEAST( ADD_MONTHS( end_date, 1 ), final_date ),
             final_date
      FROM   months
      WHERE  end_date < final_date
    )
    SEARCH DEPTH FIRST BY final_date SET dt_order
    SELECT id,
           start_date,
           end_date
    FROM   months;
    

    サンプルデータの場合:

    CREATE TABLE table_name (id, start_date, end_date) AS
    SELECT 44, DATE '2020-01-04', DATE '2020-01-04' FROM DUAL UNION ALL
    SELECT 44, DATE '2020-01-30', DATE '2020-02-10' FROM DUAL UNION ALL
    SELECT 44, DATE '2020-02-27', DATE '2020-03-03' FROM DUAL;
    

    出力:

    db <> fiddle こちら



    1. mysqlは通貨としてintを選択しますか、それともintを通貨形式に変換しますか?

    2. PostgreSQL8.4で既存の*.sqlファイルをインポートする方法は?

    3. ユーザーに対してCREATEコマンドが拒否されましたか?

    4. エラー:データソースが接続の確立を拒否しました、サーバーからのメッセージ:接続が多すぎます