SQL:使用移位获取两个日期之间的所有日期

时间:2018-07-10 10:40:45

标签: sql sql-server

我有一个表格,其中包含“ 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

1 个答案:

答案 0 :(得分:3)

也许您需要递归 ctecross连接:

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