我有以下问题。我有一份系统每小时/每天运行的检查清单。它知道要运行的检查,因为它们在数据库中。现在,我制作了一个不同的表,可以在其中为每个应用程序设置维护时段。我正在运行以下问题。
我加入了有关应用程序ID的维护窗口表。像这样:
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]);
这将返回一个列表,其中包含当前正在维护的应用程序,因此不应运行检查。
我曾尝试将其设置为“ NON BETWEEN”。但这使我最终根本没有任何记录,因为没有维护时,开始和结束日期将在连接上返回null。
一个肮脏的解决方法可能是强制在1990年或在日期为null时强制某个日期,但应该有一个更清洁的选项对吧?]
我有以下问题。我有一份系统每小时/每天运行的检查清单。它知道要运行的检查,因为它们在数据库中。现在,我制作了另一个表,可以在其中设置...
我认为您想将条件移至ON
子句:
按照查询的立场,结果将是检查表中的所有行,并且仅是维护表中按appid匹配的那些行。