ホームページ >データベース >mysql チュートリアル >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 サイトの他の関連記事を参照してください。