我有一个表格,其中包含“ startbooking”和“ endbooking”列 我还有其他内容可以满足这种变化:
id |start |end
M | 06:00 |14:00
T | 14:00 |20:00
N | 20:00 |06:00
所以,我需要根据班次获取开始预订和结束预订之间的所有日期
示例:
startbooking: 01/05/2015 12:00 endbooking: 02/05/2015 16:00
结果:
01/05/2015 |M
01/05/2015 |T
01/05/2015 |N
02/05/2015 |M
02/05/2015 |T
答案 0 :(得分:3)
也许您需要递归 cte
和cross
连接:
with t as (
select startdt, enddt
from table
union all
select dateadd(day, 1, startdt), enddt
from t
where startdt < enddt
)
select t.startdt, sft.id
from t cross join (select distinct id from shifttable) sft
option (maxrecursion 0);
这里是Demo。