How to select all hours between two dates?

后端 未结 2 541
不思量自难忘°
不思量自难忘° 2020-12-16 22:17
declare @minDateTime as datetime;
declare @maxDateTime as datetime;

set @minDateTime = \'2014-01-13 02:00:00\';
set @maxDateTime = \'2014-12-31 14:00:00\';
<         


        
2条回答
  •  爱一瞬间的悲伤
    2020-12-16 23:22

    Here is another way using a Tally Table:

    DECLARE @minDateTime DATETIME;
    DECLARE @maxDateTime DATETIME;
    
    SET @minDateTime = '2014-01-13 02:00:00';
    SET @maxDateTime = '2014-12-31 14:00:00';
    
    DECLARE @hrsDiff INT;
    SELECT @hrsDiff = DATEDIFF(HH, @minDateTime, @maxDateTime);
    
    WITH E1(N) AS (
        SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
        SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
        SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
    ),--10E+1 or 10 rows
    E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows
    E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10E+4 or 10,000 rows max
    Tally(N) AS(SELECT row_number() over(order by (select null)) from E4) -- Numbered rrow
    SELECT @minDateTime 
    UNION ALL
    SELECT DATEADD(HH, N, @minDateTime)
    FROM Tally
    WHERE
        N <= @hrsDiff
    

提交回复
热议问题