根据2个日期返回日期列表

时间:2013-10-10 19:47:15

标签: sql-server-2008

我希望有人能快速回答这个问题......

我有开始日期和结束日期。什么是生成所有包含日期​​的完整列表的最快/最简单的方法?

startDate         endDate
------------------------------
2013-01-01        2013-01-07

会产生:

day        date
--------------------
 1        2013-01-01
 2        2013-01-02
 3        2013-01-03
 4        2013-01-04
 5        2013-01-05
 6        2013-01-06
 7        2013-01-07

感谢您的关注! :)

1 个答案:

答案 0 :(得分:1)

这将支持超过2,000天(取决于您的SQL Server版本和您拥有的用户对象数),如果您需要更多,只需将sys.all_objects更改为sys.all_columns(这应该是支持超过8,000)。

DECLARE @start DATE = '20130101', @end DATE = '20130107';

;WITH x AS
(
  SELECT TOP (DATEDIFF(DAY, @start, @end)+1) 
    rn = ROW_NUMBER() OVER (ORDER BY [object_id])
    FROM sys.all_objects
)
SELECT [day] = rn, [date] = DATEADD(DAY, rn-1, @start)
FROM x
ORDER BY rn;