首頁 >資料庫 >mysql教程 >如何在 SQL 中產生完整的日期範圍,包括缺少的零值日期?

如何在 SQL 中產生完整的日期範圍,包括缺少的零值日期?

Linda Hamilton
Linda Hamilton原創
2024-12-29 20:35:20215瀏覽

How to Generate a Complete Date Range in SQL, Including Missing Dates with Zero Values?

產生包含缺失值的完整日期範圍

處理日期資料時,通常需要顯示指定範圍內的所有日期,即使某些日期的記錄遺失。如何在 SQL 中實現此目的,確保缺少的日期在相關列中顯示零值?

考慮下表@temp,其中包含範例日期資料:

INSERT INTO @temp SELECT '10/2/2012', 1
INSERT INTO @temp SELECT '10/3/2012', 1
INSERT INTO @temp SELECT '10/5/2012', 1
INSERT INTO @temp SELECT '10/7/2012', 2
INSERT INTO @temp SELECT '10/9/2012', 2
INSERT INTO @temp SELECT '10/10/2012', 2
INSERT INTO @temp SELECT '10/13/2012', 2
INSERT INTO @temp SELECT '10/15/2012', 2

要擷取兩個給定日期之間的所有日期,您可以使用以下查詢:

SELECT * FROM @temp WHERE CDate BETWEEN '10/01/2012' AND '10/15/2012'

但是,此查詢只會傳回該日期範圍內的現有記錄。要包含零值的缺失日期,您需要建立完整的日期範圍並將其與現有資料連接:

;WITH d(date) AS (
  SELECT CAST('10/01/2012' AS DATETIME)
  UNION ALL
  SELECT DATE + 1
  FROM d
  WHERE DATE < '10/15/2012'
  )
SELECT t.ID, d.date 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) -- Use this if your dates are >99 days apart

MAXRECURSION 數位選項限制遞歸迭代的次數,確保查詢成功完成。 ISNULL 函數將 val 列中的任何空值替換為零。

使用此方法,可確保顯示指定範圍內的所有日期,缺失值以零表示。

以上是如何在 SQL 中產生完整的日期範圍,包括缺少的零值日期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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