在日期范围内每小时插入一行

时间:2017-10-25 17:42:04

标签: sql-server

我有一个包含StartDate列和EndDate列的表。我需要在上表列的日期范围内每小时插入一个新行。 我看到的表格如下 StartDate EndDate
2017-10-25 19:00:00.000 2017-11-30 23:59:59.997
2017-10-26 13:00:00.000 2017-12-1 23:59:59.997

我需要的新表应该看起来像这样 日期时间
2017-10-25 19
2017-10-25 20
2017-10-25 21
2017-10-25 22
2017-10-25 23
2017-10-26 0
2017-10-26 1
2017-10-26 2
::::::::::: ::::::::::: 2017-11-30 22
2017-11-30 23

我迷路了,请帮帮忙!

1 个答案:

答案 0 :(得分:1)

可以使用与CROSS APPLY一致的临时计数表来完成。

示例

Select Date = cast(D as date)
      ,Hour = datepart(HOUR,D) 
 From YourTable A
 Cross Apply (
                Select Top (DateDiff(HOUR,A.StartDate,A.EndDate)+1) D=DateAdd(HOUR,-1+Row_Number() Over (Order By (Select Null)),A.StartDate) 
                 From  master..spt_values n1,master..spt_values n2
             ) B

<强>返回

Date        Hour
2017-10-25  19
2017-10-25  20
2017-10-25  21
2017-10-25  22
2017-10-25  23
2017-10-26  0
2017-10-26  1
2017-10-26  2
2017-10-26  3
...