NULL
值,我想对其应用与NULL
不同的值的过滤器。使用可用的GUI进行此类查询构造,可以直观地尝试
"obj_art" != NULL
”的意思是“给我具有与
NULL
不同的属性“ obj_art”的所有功能”((这些绝对超过0)。从我的角度来看,测试此查询会产生一个奇怪的结果:"obj_art" IS NOT NULL
问题是,
!= NULL
和IS NOT NULL
有什么区别?#1 楼
免责声明:由于QGIS中的过滤语法可与SQL一起使用,因此我在此假定适用SQL规则。我不完全确定这是否完全正确,但似乎很合理,并且确实可以解释其行为。该过滤器可与SQL一起使用,这就是为什么您必须在那里寻找答案的原因简而言之,当将逻辑运算符与
null
结合使用时,结果始终为null
。但是,为了测试null
,SQL附带了IS (NOT)
比较功能,该功能允许将它用于您想要的过滤。 >#2 楼
NULL
不是值,因此不能等于=
或不等于!=
的任何值。它与作为值的零0
不同。NULL
表示您正在查看的单元格中没有记录任何值。要检查值是否存在,请询问单元格IS NULL
还是IS NOT NULL
IS NULL
检查单元格是否为空IS NOT NULL
检查以查看单元格是否不为空如果您有一些记录,这些记录的值分别为
One
,Two
,Three
和其余NULL
,而您想查找所有非Two
的内容,则需要使用类似value != 'Two' OR value IS NULL
之类的方法,因为在equals / not equals查询中不会返回NULL值。如果仅使用
value != 'Three'
,则结果将排除所有NULL
记录,因为NULL
的值不能相等或不相等。
评论
据我所知,这只是语法。当为null时,使用为或不是。否则使用=或!=“一个人会直观地尝试”真的吗?为什么? NULL不是值。从字面上看,这是一个价值的缺失。您不能“等于” NULL!运算符!=并不表示“不是”;它的意思是“不等于”。 IS NOT表示“不是”,因此我认为这很直观:)
@LightnessRacesinOrbit如果没有理解NULL不是一个值,我会说尝试使用=或!=是很直观的,因为这是您评估任何其他值的方式。直到您知道NULL不是一个值,使用IS NOT而不是!=才是真正直观的。许多人不知道真正的NULL是什么。
而且,在GUI中,NULL在值列表中(如上),因此被视为“正常”值。而且没有按钮是NULL,还是我错过了?因此,当仅键入此类查询并具有知识时,就必须以特殊方式对待NULL,我们可以讨论直觉,但请确保不要在THIS GUI的上下文中使用。
@Midavalo:的确如此,我会谦虚地建议不要使用语言功能而不先查找它是什么:)通过猜测进行编程是行不通的。