为了账号安全,请及时绑定邮箱和手机立即绑定

使用函数获取两个日期之间的日期列表。

使用函数获取两个日期之间的日期列表。

紫衣仙女 2019-06-26 13:36:43
使用函数获取两个日期之间的日期列表。我的问题类似于这,这个MySQL问题,但打算用于SQLServer:是否有一个函数或查询将返回两个日期之间的天数列表?例如,假设有一个名为爆炸物的函数:SELECT ExplodeDates('2010-01-01', '2010-01-13');这将返回一个包含以下值的列表:2010-01-01 2010-01-02 2010-01-03 2010-01-04 2010-01-05 2010-01-06 2010-01-07 2010-01-08 2010-01-09 2010-01-10 2010-01-11 2010-01-12 2010-01-13我在想一个日历/数字表也许能帮到我。更新我决定查看所提供的三个代码答案,执行结果-占批处理总数的百分比-是:罗布·法利的回答 : 18%史丁杰克的回答 : 41%KM的回答 : 41%越低越好我已经接受了罗伯·法利的答案,因为它是最快的,尽管数字表解决方案(KM和StingyJack在他们的答案中都使用)是我最喜欢的。罗伯·法利比他快了三分之二。更新2阿莉维亚氏回答更简洁。我已经改变了接受的答案。
查看完整描述

3 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

这几行是SQL Server中这个问题的简单答案。

WITH mycte AS(
  SELECT CAST('2011-01-01' AS DATETIME) DateValue  UNION ALL
  SELECT  DateValue + 1
  FROM    mycte   
  WHERE   DateValue + 1 < '2021-12-31')SELECT  DateValueFROM    mycteOPTION (MAXRECURSION 0)


查看完整回答
反对 回复 2019-06-26
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

这正是你想做的,从威尔之前的文章修改。不需要帮助表或循环。

WITH date_range (calc_date) AS (
    SELECT DATEADD(DAY, DATEDIFF(DAY, 0, '2010-01-13') - DATEDIFF(DAY, '2010-01-01', '2010-01-13'), 0)
        UNION ALL SELECT DATEADD(DAY, 1, calc_date)
            FROM date_range            WHERE DATEADD(DAY, 1, calc_date) <= '2010-01-13')SELECT calc_dateFROM date_range;


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 692 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信