是否与空值定义的行为进行比较?

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

在最近的代码审查中,我被要求更改

Amount > 0

to

ISNULL(Amount,0) > 0

是否有可能获得不同的结果?据我所知,如果Amount为null或0,则它们都将返回false;在其他情况下,它们都将返回true

sql sql-server tsql null where-clause
2个回答
0
投票

将任何内容与null进行比较都会导致NULL而不是false。

这实际上与返回false的效果相同,因为查询将仅返回数量不为null且大于0的行,但是您应注意不要假设,当数量为null时比较的结果为false

例如,这也将无法返回空行:

WHERE NOT(amount > 0) 

amount > 0为NULL不为假。如果为假,则NOT不能将其设为真]

[您可能会认为NULL是一种污染物,它遍历它所接触的每个条件和操作,并将其全部变为NULL,然后在最后一刻“变成错误”,就这样]


0
投票

amount > 0检查amount是否严格大于0。如果值为NULL,则条件返回null(不是true,但实际上不是false)。

ISNULL(amount, 0) > 0做同样的事情。 NULL的值变为0,这也会使检查失败-但是,在这种情况下,将返回false而不是null

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