У меня следующая проблема. У меня есть список проверок, которые система выполняет каждый час / день. Он знает, какие проверки нужно запускать, потому что они есть в базе данных. Теперь я сделал другую таблицу, где я могу установить обслуживание windows для каждого приложения. И я столкнулся со следующей проблемой.
Я присоединяюсь к таблице окон обслуживания по идентификатору приложения. вот так:
Select check.appid, check.query, maint.appid
from checks as check
left join maintenance as maint on maint.appid = check.appid
После этого я хотел добавить предложение where, в итоге я получил следующее
Select check.appid, check.query, maint.appid
from checks as check
left join maintenance as maint on maint.appid = check.appid
WHERE
SYSDATETIMEOFFSET()
BETWEEN
CONVERT(DATETIMEOFFSET,maint.StartDateTime AT TIME ZONE maint.[TimeZone])
AND
CONVERT(DATETIMEOFFSET,maint.EndDateTime AT TIME ZONE maint.[TimeZone]);
Это возвращает список с приложениями, которые в настоящее время находятся на обслуживании, поэтому это не должно запускать проверки.
Я пытался сделать это НЕ МЕЖДУ. Но это приводит к тому, что у меня вообще нет записей, потому что, когда нет обслуживания, start и enddate вернут нулевое значение для соединения.
грязное исправление могло заключаться в том, чтобы принудительно установить дату в 1990 году или что-то в этом роде, когда дата равна нулю, но должна быть доступна более чистая опция, верно?