Common Table Expression打印所提供的开始日期和结束日期之间的所有日期?

时间:2014-02-15 08:29:21

标签: sql sql-server common-table-expression

我想编写查询,公用表表达式语句来打印提供的开始日期和结束日期之间的所有日期?

例如: startDate:2014年1月15日 结束日期:2014年2月15日

2 个答案:

答案 0 :(得分:2)

 Declare @start date='2014-01-15' 
 Declare @Enddate date='2014-02-15' 
 ;with CTE as
 (select @start dates
 union all
 select DATEADD(day,1,dates) from cte where dates<@Enddate

 )
 select * from cte

答案 1 :(得分:1)

DECLARE @mindate DATETIME
DECLARE @maxdate DATETIME
DECLARE @diff INT
SET @maxdate = '2014-02-15'
SET @mindate = '2014-01-15'

SET @diff = DATEDIFF(DAY,  @mindate,@maxdate)
;WITH cte(dt,level)
AS
(
    SELECT  @mindate AS dt, 0 AS level 
    UNION ALL
    SELECT DATEADD(day,1,cte.dt),level + 1 from cte WHERE level < @diff
)
SELECT dt FROM cte
option (maxrecursion 32767)

如果开始日期和结束日期相隔超过100天,则需要选项maxrecursion

检查SQLFiddle上的查询:http://www.sqlfiddle.com/#!3/fd09f/10