Вместо сложных инструкций я рекомендую использовать таблицу для дней и смен.
DECLARE @SampleData TABLE (ID INT, Logtime DATETIME)
INSERT INTO @SampleData VALUES
(1, '2019-10-17 00:05:00'),
(2, '2019-10-17 05:55:00'),
(3, '2019-10-17 06:05:00'),
(4, '2019-10-17 14:55:00'),
(5, '2019-10-17 15:05:00'),
(6, '2019-10-17 23:55:00')
SET DATEFIRST 1
SELECT T.*, Shifts.Shift FROM
@SampleData T
INNER JOIN (VALUES ( 1, 0, 6,'Night'), ( 1, 6, 15,'Morning'), ( 1, 15, 24,'Evening'),
( 2, 0, 6,'Night'), ( 2, 6, 15,'Morning'), ( 2, 15, 24,'Evening'),
( 3, 0, 6,'Night'), ( 3, 6, 15,'Morning'), ( 3, 15, 24,'Evening'),
( 4, 0, 6,'Night'), ( 4, 6, 15,'Morning'), ( 4, 15, 24,'Evening'),
( 5, 0, 6,'Night'), ( 5, 6, 15,'Morning'), ( 5, 15, 24,'Evening'),
( 6, 0, 6,'Night'), ( 6, 6, 15,'Morning'), ( 6, 15, 24,'Evening'),
( 7, 0, 6,'Night'), ( 7, 6, 15,'Morning'), ( 7, 15, 24,'Evening') ) Shifts(DayOfW, SDate, EDate, Shift) ON
DATEPART(WEEKDAY,T.Logtime) = Shifts.DayOfW
AND DATEPART(HOUR,T.Logtime) >= Shifts.SDate
AND DATEPART(HOUR,T.Logtime) < Shifts.EDate
Результат:
ID Logtime Shift
----------- ----------------------- -------
1 2019-10-17 00:05:00.000 Night
2 2019-10-17 05:55:00.000 Night
3 2019-10-17 06:05:00.000 Morning
4 2019-10-17 14:55:00.000 Morning
5 2019-10-17 15:05:00.000 Evening
6 2019-10-17 23:55:00.000 Evening