2013-10-10 149 views
1

我希望有人对此有一个快速的答案...返回基于2日期的日期列表

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

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 

谢谢您的关注! :)

+0

已经回答了这里:http://stackoverflow.com/questions/510012/get-a-list-of-dates-between-two-dates – jpw

+0

@jpw这是MySQL的 –

+1

@AaronBertrand的答案被保护文章也包括MSSQL的解决方案,例如,请参阅第二个答案。 – jpw

回答

1

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

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; 
+0

这两个答复都非常有帮助 - 谢谢你,@ jpw指向我的程序文章,并感谢你在答复中的帖子和这,@aaronBertrand ....恒星! – jlisham