首页 >数据库 >mysql教程 >如何显示两个日期之间的所有日期,包括缺失日期的零值?

如何显示两个日期之间的所有日期,包括缺失日期的零值?

Linda Hamilton
Linda Hamilton原创
2024-12-23 02:08:10833浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn