SQL を使用して日付範囲内の日付のリストを生成します
データの分析と管理では、指定された日付範囲内の日付リストを生成することが必要になることがよくあります。これは効率的な SQL クエリを通じて実現できます。
1 つの方法は、サブクエリを使用して日付シーケンスを生成することです。たとえば、次のクエリは過去 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>
特定の日付範囲内の日付のリストを生成するには、WHERE 句を使用して日付をフィルターできます。
<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 ... -- 上述子查询 ) a WHERE a.Date BETWEEN '2010-01-20' AND '2010-01-24';</code>
このクエリは次の出力を返します:
<code>Date ---------- 2010-01-24 2010-01-23 2010-01-22 2010-01-21 2010-01-20</code>
このメソッドのパフォーマンスは驚くほど優れており、100,000 個の日付を生成するのに 1 秒もかかりません。また、移植性も高く、ほとんどのデータベースと互換性があります。
以上がSQL を使用して特定の範囲内の日付のリストを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。