Трехкратная проверка даты и времени в запросе SQL Server - PullRequest
0 голосов
/ 24 января 2019

У меня проблема с проверкой SQL-запросов в одном из моих проектов.На самом деле, я должен получить записи, основанные на SHIFTNAME, т.е. первые смещения, секунды и третье смещение относительно даты.

У нас есть следующие сроки смены, смена будет в 24-часовом формате

ShiftId   ShiftName       ShiftFrom    ShiftTo
-----------------------------------------------
   1      First Shift       07:00       12:00
   2      Second Shift      12:00       22:00
   3      Third Shift       22:00       07:00

Моя проблема в том, что я правильно получаю записи в shift1 и shift2, но не в файлах shift3.Я иду по кругу, чтобы решить это.Я использую следующий поисковый запрос для извлечения записей во всех сменах

select case when convert (varchar(5),GETDATE(),108) between (
  select ShiftFrom 
  from tbl_Shift_Master
  where ShiftId = 1
) and (
  select ShiftTo
  from tbl_Shift_Master
  where ShiftId = 2
) then 1 else 2 end as ShiftId

1 Ответ

0 голосов
/ 24 января 2019

Вы можете сделать это без сохранения времен сдвига в переменных, но мне кажется, что это более понятно:

DECLARE @ST1_S TIME
       ,@ST1_E TIME
       --
       ,@ST2_S TIME
       ,@ST2_E TIME
       --
       ,@ST3_S TIME
       ,@ST3_E TIME;

SELECT @ST1_S = CASE WHEN ShiftId = 1 THEN ShiftFrom  ELSE @ST1_S END
      ,@ST1_E = CASE WHEN ShiftId = 1 THEN ShiftTo  ELSE @ST1_E END
      --
      ,@ST2_S = CASE WHEN ShiftId = 2 THEN ShiftFrom  ELSE @ST2_S END
      ,@ST2_E = CASE WHEN ShiftId = 2 THEN ShiftTo  ELSE @ST2_E END
      --
      ,@ST3_S = CASE WHEN ShiftId = 3 THEN ShiftFrom  ELSE @ST3_S END
      ,@ST3_E = CASE WHEN ShiftId = 3 THEN ShiftTo  ELSE @ST3_E END
FROM tbl_Shift_Master;


SELECT CASE 
            WHEN convert (varchar(5),GETDATE(),108) BETWEEN @ST1_S AND @ST1_E THEN  1
            WHEN convert (varchar(5),GETDATE(),108) BETWEEN @ST2_S AND @ST2_E THEN  2
            WHEN convert (varchar(5),GETDATE(),108) BETWEEN @ST3_S AND @ST3_E THEN  3
        END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...