OracleのCONNECT BYを使用した日付の範囲指定方法(週ごと、月ごとなど)


まず、CONNECT BY句を使用して特定の期間内の日付を生成するクエリを作成します。以下は、週ごとの日付範囲を生成する例です。

SELECT TRUNC(start_date + (LEVEL-1) * 7, 'IW') AS start_week,
       TRUNC(start_date + (LEVEL-1) * 7, 'IW') + 6 AS end_week
FROM
  (SELECT DATE '2024-01-01' AS start_date,
          DATE '2024-12-31' AS end_date
   FROM dual)
CONNECT BY TRUNC(start_date + (LEVEL-1) * 7, 'IW') <= end_date;

上記のクエリでは、開始日と終了日を指定し、CONNECT BY句を使用して週ごとの日付範囲を生成しています。LEVELはCONNECT BYレベルを表し、週ごとに1ずつ増加させています。TRUNC関数を使用して、日付を週の最初の日(月曜日)に丸めています。

同様に、月ごとの日付範囲を生成するクエリも作成できます。以下は、月ごとの日付範囲を生成する例です。

SELECT TRUNC(start_date, 'MM') AS start_month,
       LAST_DAY(start_date) AS end_month
FROM
  (SELECT DATE '2024-01-01' AS start_date,
          DATE '2024-12-31' AS end_date
   FROM dual)
CONNECT BY TRUNC(start_date, 'MM') <= end_date;

上記のクエリでは、開始日と終了日を指定し、CONNECT BY句を使用して月ごとの日付範囲を生成しています。TRUNC関数を使用して、日付を月の最初の日に丸めています。また、LAST_DAY関数を使用して、月の最後の日を取得しています。

このようにして、CONNECT BY句を使用して、週ごとや月ごとなどの日付範囲を生成することができます。これらのクエリを適宜修正して、特定の期間や時間単位に合わせた日付範囲を作成してください。