declare @minDateTime as datetime; declare @maxDateTime as datetime; set @minDateTime = '2014-01-13 02:00:00'; set @maxDateTime = '2014-12-31 14:00:00';
我想创建一个select语句,它将在@minDateTime和@maxDateTime之间每小时返回一次(没有可供选择的表.我不是在寻找where子句!):
2014-01-13 02:00:00 2014-01-13 03:00:00 2014-01-13 04:00:00 ... 2014-12-31 12:00:00 2014-12-31 13:00:00 2014-12-31 14:00:00
解决方法
试试这个.使用递归CTE.
DECLARE @minDateTime AS DATETIME; DECLARE @maxDateTime AS DATETIME; SET @minDateTime = '2014-01-13 02:00:00'; SET @maxDateTime = '2014-12-31 14:00:00'; ; WITH Dates_CTE AS (SELECT @minDateTime AS Dates UNION ALL SELECT Dateadd(hh,1,Dates) FROM Dates_CTE WHERE Dates < @maxDateTime) SELECT * FROM Dates_CTE OPTION (MAXRECURSION 0)
在上面的查询中,Dates_CTE是一个公共表达式表,CTE的基本记录是由UNION ALL之前的第一个SQL查询派生的.查询结果为您提供最短日期.
重复执行UNION ALL后的第二次查询以获得结果.此过程是递归的,并将持续到Dates小于@maxDateTime.