, , : A) . ( , .), B) , " ", .
with TB(src,S,E) as (
select 'T', StartDateTime, EndDateTime from @timeranges as T
union all
select 'B', StartDateTime, EndDateTime from @blockedtimes as B
), TBP(evt,switch,DT,rk) AS (
select
src+DT,
CHARINDEX(src+DT,'TEBSTSBE')/5 AS OffOn,
EventDT,
row_number() over (
order by EventDT, CHARINDEX(src+DT,'TEBSTSBE')/5 desc
) as rk
from TB UNPIVOT (
EventDT FOR DT in ([S],[E])
) as U
)
select
min(DT) as StartDateTime,
max(DT) as EndDateTime
from TBP
group by (rk-1)/2
having min(DT) < max(DT)
order by (rk-1)/2;
?
datetime 0 1, , (0, EndDateTime @timeranges StartDateTime @blockedtimes) (1 ) . , rk, row_number. CASE, CHARINDEX , ...
- 0 1: 0,1,0,1,0,1... (0,1) , . (rk-1)/2.
. - , , , , . , , , .
, .
, , , . , row_number , .