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
。
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
a中Common Expression Table
,的基本记录CTE
由之前的第一个sql查询派生UNION ALL
。查询结果给您Minimum date
。
UNION ALL
重复执行第二个查询以获取结果。此过程recursive
将继续进行,直到Dates少于@maxDateTime
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句