如何使用SQL将时间拆分为每小时插槽(可以使用视图,或存储的PROC或功能)



示例我在表中具有开始日期,结束日期和持续时间的数据。我想显示小时的时间插槽。

逻辑

  • 条件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中实现此目标?

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

为此,您可以使用递归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)可以添加到查询中。

最新更新