繁体   English   中英

SQL 服务器中这两个 AND 运算符有什么区别?

[英]What is the difference between these two AND Operators in SQL Server?

AND (
     (mmd.TerminationDate IS NOT NULL AND mmd.TerminationDate >= '01-Jan-2019')
     OR mmd.TerminationDate IS NULL
)
AND (mmd.TerminationDate IS NULL OR mmd.TerminationDate >= '01-Jan-2020')

假设字面日期应该是相同的,这两个条件都做同样的事情——也就是说,允许日期为 null 或大于 1 月 1 日。

第一个表达式不必要地多余:

(mmd.TerminationDate is NOT NULL and mmd.TerminationDate >= '01-Jan-2019') 
or mmd.TerminationDate is null)

如果TerminationDatenull ,那么它不能大于 1 月 1 日,所以第一个子条件实际上归结为mmd.TerminationDate >= '01-Jan-2019'

无关说明:虽然 SQL 服务器在理解日期格式方面非常灵活,但我会使用更标准的格式来表示一月第一,例如:

mmd.TerminationDate is Null OR mmd.TerminationDate >= '2019-01-01'

第一部分:

AND((mmd.TerminationDate 不是 NULL 和 mmd.TerminationDate >= '01-Jan-2019')或 mmd.TerminationDate 为空)

这里它验证了两件事:(mmd.TerminationDate is NOT NULL and mmd.TerminationDate >= '01-Jan-2019')这两个条件都应该是 True 否则它不是那么第二个条件(mmd.TerminationDate 为空)应该是真的。

(mmd.TerminationDate 不是 NULL 和 mmd.TerminationDate >= '01-Jan-2019'):它正在检查终止日期不应该是 null 和终止日期应该等于或大于 '01-Jan-2'日期。 这两个条件都应该为真,否则将无法验证。

“或”之后的第二部分:

(mmd.TerminationDate 为空):这是验证终止日期不应为 null,此列应具有任何日期值。

在这两个条件之间,您使用了“或”,这意味着从这两个条件中,任何人都应该符合条件才能获得记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM