首页 > 数据库 > mysql教程 > 如何在 SQL 中生成完整的日期范围,包括缺失的零值日期?

如何在 SQL 中生成完整的日期范围,包括缺失的零值日期?

Linda Hamilton
发布: 2024-12-29 20:35:20
原创
191 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板