首頁 >資料庫 >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' qty 值。

以上是如何在沒有日曆表的情況下在 MySQL 中產生日期範圍?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn