SQL不介于日期之间(包括NULL)

问题描述 投票:0回答:2

我有以下问题。我有一份系统每小时/每天运行的检查清单。它知道要运行的检查,因为它们在数据库中。现在,我制作了一个不同的表,可以在其中为每个应用程序设置维护时段。我正在运行以下问题。

我加入了有关应用程序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时强制某个日期,但应该有一个更清洁的选项对吧?]

我有以下问题。我有一份系统每小时/每天运行的检查清单。它知道要运行的检查,因为它们在数据库中。现在,我制作了另一个表,可以在其中设置...

sql tsql between
2个回答
0
投票

我认为您想将条件移至ON子句:


0
投票

按照查询的立场,结果将是检查表中的所有行,并且仅是维护表中按appid匹配的那些行。

© www.soinside.com 2019 - 2024. All rights reserved.