ホームページ > データベース > mysql チュートリアル > ループや一時テーブルを使用せずに特定の範囲内の日付のリストを生成するにはどうすればよいですか?

ループや一時テーブルを使用せずに特定の範囲内の日付のリストを生成するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-23 17:07:10
オリジナル
925 人が閲覧しました

How to Generate a List of Dates Within a Specific Range Without Loops or Temporary Tables?

日付範囲から日付を生成

データ分析における一般的なタスクは、指定された日付範囲から特定の日付を抽出することです。たとえば、「2010-01-20」から「2010-01-24」までの日付を取得する必要がある場合があります。

ループや一時テーブルを使用しないソリューション

ループ、プロシージャ、または一時テーブルを使用せずにこれを実現するには、サブクエリを利用して日付シーケンスを生成できます。

<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>
ログイン後にコピー

このサブクエリは、約 10,000 日にわたる日付シリーズを生成します。サブクエリ内の範囲を拡大または縮小することで、日数を調整できます。

出力

クエリは次の日付を返します:

<code>Date
----------
2010-01-20
2010-01-21
2010-01-22
2010-01-23
2010-01-24</code>
ログイン後にコピー

パフォーマンスノート

このクエリのパフォーマンスは非常に優れており、5 日間の範囲で 0.0009 秒で実行されます。 100,000 日の範囲であっても、わずか 0.0458 秒で完了します。

互換性と移植性

このテクノロジーは、わずかな調整を行うだけで、ほとんどのデータベースと互換性があります。たとえば、CURDATE() 関数を特定のデータベース内の対応する関数に置き換えることができます。

以上がループや一時テーブルを使用せずに特定の範囲内の日付のリストを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート