ホームページ >データベース >mysql チュートリアル >SQL で特定の範囲内の一連の日付を効率的に生成するにはどうすればよいですか?
SQL 日付範囲を生成する効率的な方法
データベース プログラミングでは、特定の日付範囲内の日付シーケンスを生成するのが一般的なタスクです。たとえば、2010 年 1 月 20 日から 2010 年 1 月 24 日までの日付をクエリします:
<code class="language-sql">SELECT ... AS days WHERE `date` BETWEEN '2010-01-20' AND '2010-01-24'</code>
期待される結果は次のとおりです:
<code>days ---------- 2010-01-20 2010-01-21 2010-01-22 2010-01-23 2010-01-24</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 ( 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 ) a WHERE a.Date BETWEEN '2010-01-20' AND '2010-01-24'</code>
パフォーマンスに関する考慮事項
このソリューションは非常にパフォーマンスが高く、クエリの実行時間はわずか 0.0009 秒です。 100,000 個の日付 (約 274 年) を生成しても、クエリの実行時間はわずか 0.0458 秒です。
移植性
このテクノロジーは移植性が高く、わずかな調整だけでほとんどのデータベース システムに適応できます。
以上がSQL で特定の範囲内の一連の日付を効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。