【问题标题】:Insert a row for every hour in a date range为日期范围内的每个小时插入一行
【发布时间】:2017-10-25 17:42:03
【问题描述】:

我有一个包含 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

我很迷茫,请帮忙!

【问题讨论】:

    标签: sql-server


    【解决方案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
    ...
    

    【讨论】:

    • @MahithaAdmala 很高兴它有帮助
    猜你喜欢
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多