猿问

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

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

我的问题类似于这,这个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

我在想一个日历/数字表也许能帮到我。


更新

我决定查看所提供的三个代码答案,执行结果-占批处理总数的百分比-是:

越低越好

我已经接受了罗伯·法利的答案,因为它是最快的,尽管数字表解决方案(KM和StingyJack在他们的答案中都使用)是我最喜欢的。罗伯·法利比他快了三分之二。

更新2

阿莉维亚氏回答更简洁。我已经改变了接受的答案。


紫衣仙女
浏览 693回答 3
3回答

红糖糍粑

这几行是SQL Server中这个问题的简单答案。WITH&nbsp;mycte&nbsp;AS( &nbsp;&nbsp;SELECT&nbsp;CAST('2011-01-01'&nbsp;AS&nbsp;DATETIME)&nbsp;DateValue&nbsp;&nbsp;UNION&nbsp;ALL &nbsp;&nbsp;SELECT&nbsp;&nbsp;DateValue&nbsp;+&nbsp;1 &nbsp;&nbsp;FROM&nbsp;&nbsp;&nbsp;&nbsp;mycte&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;WHERE&nbsp;&nbsp;&nbsp;DateValue&nbsp;+&nbsp;1&nbsp;<&nbsp;'2021-12-31')SELECT&nbsp;&nbsp;DateValueFROM&nbsp;&nbsp;&nbsp;&nbsp;mycteOPTION&nbsp;(MAXRECURSION&nbsp;0)

小唯快跑啊

这正是你想做的,从威尔之前的文章修改。不需要帮助表或循环。WITH&nbsp;date_range&nbsp;(calc_date)&nbsp;AS&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;DATEADD(DAY,&nbsp;DATEDIFF(DAY,&nbsp;0,&nbsp;'2010-01-13')&nbsp;-&nbsp;DATEDIFF(DAY,&nbsp;'2010-01-01',&nbsp;'2010-01-13'),&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UNION&nbsp;ALL&nbsp;SELECT&nbsp;DATEADD(DAY,&nbsp;1,&nbsp;calc_date) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;date_range&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;DATEADD(DAY,&nbsp;1,&nbsp;calc_date)&nbsp;<=&nbsp;'2010-01-13')SELECT&nbsp;calc_dateFROM&nbsp;date_range;
随时随地看视频慕课网APP
我要回答