ホームページ >データベース >mysql チュートリアル >カレンダー テーブルを使用せずに MySQL で日付範囲を生成するにはどうすればよいですか?

カレンダー テーブルを使用せずに MySQL で日付範囲を生成するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-14 11:05:42325ブラウズ

How to Generate a Date Range in MySQL Without a Calendar Table?

カレンダー テーブルを使用せずに 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. 任意表 は、-1 ~ 364 (閏年の場合は -1 ~ 365) の仮想行番号範囲を作成するための参照として使用されます。
  2. ADDDATE() 関数は、開始日に適切な日数を追加します。
  3. 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 サイトの他の関連記事を参照してください。

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