如何选择两个日期之间的所有时间?

Mar*_*arc 7 sql t-sql sql-server

declare @minDateTime as datetime;
declare @maxDateTime as datetime;

set @minDateTime = '2014-01-13 02:00:00';
set @maxDateTime = '2014-12-31 14:00:00';
Run Code Online (Sandbox Code Playgroud)

我期待创建一个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
Run Code Online (Sandbox Code Playgroud)

Pரத*_*ீப் 11

试试这个.用一个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) 
Run Code Online (Sandbox Code Playgroud)

在上面的查询中Dates_CTE是a Common Expression Table,基本记录CTE是由第一个sql查询之前派生的UNION ALL.查询的结果为您提供了Minimum date.

UNION ALL重复执行第二次查询以获得结果.此过程recursive将持续到日期小于@maxDateTime.