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

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

DDD
DDDオリジナル
2025-01-23 17:17:14991ブラウズ

How Can I Efficiently Generate a Sequence of Dates Within a Specific Range in 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 サイトの他の関連記事を参照してください。

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