日付範囲から日付を生成
データ分析における一般的なタスクは、指定された日付範囲から特定の日付を抽出することです。たとえば、「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 サイトの他の関連記事を参照してください。