ホームページ >データベース >mysql チュートリアル >カレンダー テーブルを使用せずに MySQL で日付範囲を生成するにはどうすればよいですか?
カレンダー テーブルを使用せずに MySQL の日付範囲を賢く生成します
PostgreSQL の generate_series()
関数を使用すると、日付範囲を簡単に生成できます。ただし、MySQL には直接同等の機能はありません。この記事では、MySQL に同様の機能を実装するのに役立つソリューションを提供します。
チャレンジ
多くの場合、完全な日付範囲を使用してデータを結合するクエリを実行する必要があります。ただし、データベースに特定のカレンダー テーブルがない場合、このタスクは面倒になる可能性があります。
MySQL ソリューション
提供されたサンプルテーブルを使用して、MySQL で日付範囲を作成します:
<code class="language-sql">SELECT DATE_FORMAT( ADDDATE('2011-1-1', @num := @num + 1), '%Y-%m-%d' ) AS 日期 FROM 任意表, (SELECT @num := -1) AS num LIMIT 365;</code>
説明
このクエリは、次の手順を使用して、「2011-01-01」から「2011-12-31」までの日付範囲を生成します。
任意表
は、-1 ~ 364 (閏年の場合は -1 ~ 365) の仮想行番号範囲を作成するための参照として使用されます。 ADDDATE()
関数は、開始日に適切な日数を追加します。 DATE_FORMAT()
この関数は、生成された日付を必要な「YYYY-MM-DD」形式にフォーマットします。 統合
このクエリは、メイン クエリ内のサブクエリとして使用して、元のテーブルと結合できます。例:
<code class="language-sql">SELECT t.日期, COALESCE(d.qty, 0) AS qty FROM ( SELECT DATE_FORMAT( ADDDATE('2011-1-1', @num := @num + 1), '%Y-%m-%d' ) AS 日期 FROM 任意表, (SELECT @num := -1) AS num LIMIT 365 ) AS t LEFT JOIN 原始表 AS d ON t.日期 = d.日期;</code>
このクエリは目的の結果を返します。日付が欠落している行には数量値「0」が入力されます。
以上がカレンダー テーブルを使用せずに MySQL で日付範囲を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。