declare @minDateTime as datetime; declare @maxDateTime as datetime; set @minDateTime = '2014-01-13 02:00:00'; set @maxDateTime = '2014-12-31 14:00:00';
我正在寻找创建一条选择语句,该语句将每小时在@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
试试这个。使用Recursive CTE。
Recursive 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中,aCommon Expression Table的基本记录CTE由之前的第一个sql查询派生UNION ALL。查询结果为您提供Minimum date。
Dates_CTE
Common Expression Table
CTE
UNION ALL
Minimum date
UNION ALL重复执行第二个查询以获取结果。此过程 recursive 将继续进行,直到Dates少于@maxDateTime。
recursive
@maxDateTime