無需日曆表,巧妙產生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' qty 值。
以上是如何在沒有日曆表的情況下在 MySQL 中產生日期範圍?的詳細內容。更多資訊請關注PHP中文網其他相關文章!