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中实现这一目标?
答案 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)
添加到查询中。