ホームページ > データベース > mysql チュートリアル > SQLで複数の日付範囲内のすべての日付を生成するにはどうすればよいですか?

SQLで複数の日付範囲内のすべての日付を生成するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-05 16:11:43
オリジナル
770 人が閲覧しました

How to Generate All Dates Within Multiple Date Ranges in SQL?

複数の日付範囲内の日付の生成

要件が単一の日付範囲を超える場合、複数の日付範囲内のすべての日付を生成することが困難になります。この記事では、そのようなシナリオに対処し、効果的な解決策を提供します。

問題

提供された SQL Fiddle で示されているように、タスクは、指定されたセットのすべての日付を生成することです。次のような複数の日付範囲:

<br>ID START_DATE END_DATE<br>101 April, 01 2013 April, 10 2013<br>102 May, 10 2013 May, 12 2013<br>

解決策

以下クエリはこの問題に対処します:

select 
  A.ID, 
  A.START_DATE+delta dt
from 
  t_dates A, 
  (
     select level-1 as delta 
     from dual 
     connect by level-1 <= (
       select max(end_date - start_date) from t_dates
     )
  )
where A.START_DATE+delta <= A.end_date
order by 1, 2
ログイン後にコピー

解決策の内訳

  • サブクエリは (CONNECT BY を使用して) 階層構造を作成し、一連の数値を生成します。日付範囲の最大期間まで。
  • メイン クエリは、このシーケンスを日付範囲を入力し、開始日にシーケンス番号を追加して、考えられるすべての日付を生成します。
  • WHERE 句により、各範囲内の有効な日付のみが生成されます。
  • ORDER BY 句により、 ID ごとに出力し、次に日付ごとに出力します。

例出力

指定された入力に対して、クエリは次の出力を返します:

<br>ID Dates<br>101 April, 01 2013<br>101 April 、2013年02月<br>101、03年4月2013<br>101 April, 04 2013<br>101 April, 05 2013<br>101 April, 06 2013<br>101 April, 07 2013<br>101 April, 08 2013<br>101 April, 09 2013<br>101 April, 10 2013<br>102 May, 10 2013<br>102 May, 11 2013<br>102 May, 12 2013<br>

以上がSQLで複数の日付範囲内のすべての日付を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート