首頁 >資料庫 >mysql教程 >如何在沒有 `generate_series()` 的情況下在 MySQL 中產生日期範圍?

如何在沒有 `generate_series()` 的情況下在 MySQL 中產生日期範圍?

DDD
DDD原創
2025-01-14 09:15:53838瀏覽

How to Generate Date Ranges in MySQL Without `generate_series()`?

MySQL 的日期範圍產生:一種實用方法

MySQL 缺少與 PostgreSQL 的 generate_series() 直接等效的函數。 然而,我們可以使用 SQL 和變數巧妙地產生日期範圍。當您需要在沒有預先存在的日曆表的情況下建立日期範圍時,此方法特別有用。

讓我們用一個例子來說明。 想像一張銷售表:

date qty
2011-01-01 3
2011-01-01 4
2011-04-01 2
2011-06-01 5

我們的目標是擴展此功能以顯示 2011 年全年的每日銷售額:

date qty
2011-01-01 7
2011-01-02 0
2011-01-03 0
2011-04-01 2
...and so on...

以下是我們實現這一目標的方法:

<code class="language-sql">SELECT 
    DATE_FORMAT(ADDDATE('2011-01-01', @num := @num + 1), '%Y-%m-%d') AS date
FROM 
    any_table, 
    (SELECT @num := -1) AS num
LIMIT 
    365;</code>

此查詢使用 any_table(任何現有表都可以)作為佔位符以確保查詢運行。 @num 變數初始化為 -1,隨著每行遞增,產生從「2011-01-01」開始的連續日期。 LIMIT 365 將輸出限制為非閏年;使用 LIMIT 366 表示閏年。 DATE_FORMAT 函數確保日期格式一致。

該技術為在 MySQL 中產生日期範圍提供了靈活且高效的解決方案,簡化了基於日期的查詢和分析。

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

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