示例我在表中具有开始日期,结束日期和持续时间的数据。我想显示小时的时间插槽。
逻辑:
-
条件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)
可以添加到查询中。