我有一个包含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
我迷路了,请帮帮忙!
答案 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
...