如何使用SQL将时间划分为每小时时段(可以使用视图或存储的proc或函数)

时间:2019-07-03 13:59:06

标签: sql sql-server

Example我表中的数据包含开始日期,结束日期和持续时间。我想显示每小时的时间段。

逻辑

  • 条件1.如果开始日期= 9:00,结束日期= 11:00,则将日期显示为

    09:00-10:00
    10:00-11:00 
    

    它应该重复2次,所有相关的列数据也将重复2次。 如果假设时隙为11:00-14:00,则此操作将继续进行

    11:00-12:00
    12:00-13:00
    13:00-14:00
    

    它应该重复3次。

  • 条件2:如果开始日期是9:30,结束日期是10:30,则 时间应该四舍五入。即开始日期应为9:00,结束日期应为11:00

如何在Sql Server中实现这一目标?

1 个答案:

答案 0 :(得分:1)

我认为您的问题是从一行中获取多行,而不是将日期/时间值格式化为字符串。

为此,您可以使用递归CTE:

with cte as (
      select startdate as thetime, t.*
      from t
      union all
      select dateadd(hour, 1, cte.startdate), . . .  -- rest of columns here
      from cte
      where cte.thetime < cte.enddate
     )
select cte.*
from cte;

然后您可以根据需要设置thetime的格式,包括问题中带连字符的版本。

SQL Server的默认递归限制为100-产生的行数。您的示例仅使用时间,因此不能超过24,这不是问题。但是,在其他情况下可能会出现问题,在这种情况下,可以将option (maxrecursion 0)添加到查询中。