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

SQL で日付範囲を効率的に生成するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-23 17:22:13174ブラウズ

How to Efficiently Generate a Date Range in SQL?

SQL 日付範囲生成スキル

SQL で指定された範囲内の日付のリストを生成する方法はたくさんあります。この記事では、効率的なソリューションを紹介するために、「2010-01-20」から「2010-01-24」までの日付シーケンスを生成する例を取り上げます。

このメソッドはサブクエリを使用して完全な日付コレクションを生成します。 4 つのネストされたループの組み合わせにより、サブクエリは最大 10,000 日の日付シーケンスを効率的に生成でき、より長い日付範囲に簡単に拡張できます。

<code class="language-sql">select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as Date
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d</code>

次に、生成された日付リストをフィルターして、ターゲット範囲内の日付を抽出します。

<code class="language-sql">select a.Date
from (
select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as Date
from (...) as a
) a
where a.Date between '2010-01-20' and '2010-01-24'</code>

このアプローチの利点は、ループ、ストアド プロシージャ、または一時テーブルが必要ないこと、効率的であり、複数のデータベース プラットフォームに移植できることです。 10,000 日の日付の生成にかかる時間は 0.01 秒未満で、約 100,000 日の日付を生成する場合でもパフォーマンスは優れています。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。