首頁 > 資料庫 > mysql教程 > 如何顯示兩個日期之間的所有日期,包括缺失日期的零值?

如何顯示兩個日期之間的所有日期,包括缺失日期的零值?

Linda Hamilton
發布: 2024-12-23 02:08:10
原創
846 人瀏覽過

How to Show All Dates Between Two Dates, Including Zero Values for Missing Dates?

顯示兩個日期之間的所有日期數據,包括零值

使用日期數據時,經常會遇到並非所有日期的情況表示在您的資料集中。這可能會導致您的分析出現空白。為了解決這個問題並顯示指定範圍內的所有日期,我們可以結合使用多種技術。

讓我們考慮以下問題:

我們有一個名為@temp 的表,其結構如下:

DECLARE @temp TABLE (
    ID INT IDENTITY(1,1) NOT NULL,
    CDate SMALLDATETIME,
    Val INT
)
登入後複製

表содержит 2012年10月2日到10月15日的數據, 2012 年。但是,我們希望檢索 2012 年 10 月 1 日至 2012 年 10 月 15 日之間的所有日期,並為任何缺失的日期顯示零值。

處理此問題的一種方法是使用遞歸公用表表達式 (CTE )與日曆表一起產生指定範圍內的所有日期。 CTE 定義如下:

;WITH d(date) AS (
    SELECT CAST('10/01/2012' AS DATETIME),
    UNION ALL
    SELECT date + 1
    FROM d
    WHERE date < '10/15/2012'
)
登入後複製

此 CTE 產生從 2012 年 10 月 1 日到 2012 年 10 月 15 日的所有日期。

接下來,我們將CTE 與@temp 表連接起來檢索每個日期對應的值,使用ISNULL NULL 處理函數處理缺失的日期,如下所示query:

SELECT t.ID, d.date AS CDate, ISNULL(t.val, 0) AS val
FROM d
LEFT JOIN temp t ON t.CDate = d.date
ORDER BY d.date
OPTION (MAXRECURSION 0)
登入後複製

OPTION (MAXRECURSION 0) 用於限制CTE 中的遞歸數量,確保查詢不會無限期地執行。透過將其設為 0,它允許無限遞歸。

此查詢將產生所需的結果,顯示 2012 年 10 月 1 日至 2012 年 10 月 15 日之間的所有日期,任何缺失日期的值為零。

以上是如何顯示兩個日期之間的所有日期,包括缺失日期的零值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板