Получение времени между двумя датами - PullRequest
0 голосов
/ 29 января 2019

У меня есть следующая таблица:

Id  Start                End
1   2019-01-28 07:00:00  2019-01-28 17:00:00
2   2019-01-28 17:01:00  2019-01-28 02:00:00

Что я хочу сделать, это проверить, когда я запускаю свой запрос, если текущее время между интервалами с идентификатором 1 или 2. Это мой запрос.

SELECT Id FROM MyTableName 
WHERE CONVERT(varchar(5), GETDATE(), 108)
BETWEEN CONVERT(varchar(5), Start, 108) AND
CONVERT(varchar(5), End, 108)

В данный момент работает нормально, если я выполняю свой запрос с часа с 07 до 17 (идентификатор 1), но когда я пытаюсь выполнить его после 17:01, запрос не показывает никакого результата.Играя с моим запросом, я обнаружил, что это потому, что 02:00 час (id 2, 02:00 означает 2:00).

Как я могу справиться с этим?

1 Ответ

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

Основываясь на отзывах, которые вы дали в комментариях, я думаю, что лучший способ добиться того, чего вы хотите, на самом деле возможен в одном запросе без использования таблицы вообще.

SELECT CASE 
WHEN (GETDATE() > SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 7, 00)) AND (GETDATE() < SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 17, 00)) THEN 1 
WHEN (GETDATE() > SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 4, 00)) AND (GETDATE() < SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE())+1, 2, 00)) THEN 2
ELSE NULL END AS ID

Вышезапрос вернет ID 1, если время между 07:00 и 17:00, 2, если время между 17:00 и 02:00 (следующий день), и NULL, если время не входит ни в одно из этих окон.

...