конвертировать в datetime для сравнения. для смены 3 время окончания смены становится следующим днем
declare @shift table
(
shiftno int,
shiftstart time(7),
shiftend time(7)
)
-- sample data
insert into @shift values
(1, '07:00', '14:59:59'),
(2, '15:00', '22:59:59'),
(3, '23:00', '07:00:00')
declare @Currenttime as time
set @Currenttime = '06:30'
-- the query
; with shifts as
(
select *,
shift_start = convert(datetime, shiftstart),
shift_end = case when shiftstart < shiftend
then convert(datetime, shiftend)
else dateadd(day, 1, convert(datetime, shiftend))
end
from @shift
)
select *
from shifts
where convert(datetime, @Currenttime) between shift_start and shift_end
or dateadd(day, 1, convert(datetime, @Currenttime)) between shift_start and shift_end
РЕДАКТИРОВАТЬ: чтобы получить предыдущий сдвиг на основе @Currenttime
, используйте следующий запрос
-- the query
; with
shifts as
(
select *,
shift_start = convert(datetime, shiftstart),
shift_end = case when shiftstart < shiftend
then convert(datetime, shiftend)
else dateadd(day, 1, convert(datetime, shiftend))
end
from @shift
),
current_shift as
(
select PrevShiftTime = dateadd(minute, -1, shiftstart)
from shifts
where convert(datetime, @Currenttime) between shift_start and shift_end
or dateadd(day, 1, convert(datetime, @Currenttime)) between shift_start and shift_end
)
select *
from shifts s
cross join current_shift c
where convert(datetime, PrevShiftTime) between shift_start and shift_end
or dateadd(day, 1, convert(datetime, PrevShiftTime)) between shift_start and shift_end