QGIS过滤器表达式中!= NULL和IS NOT NULL有什么区别?


26

我有一个形状图层,其形状属性包含NULL值,我想对其应用与值不同的过滤器NULL

在此处输入图片说明

使用可用的gui进行这种查询构造,人们会直观地尝试

"obj_art" != NULL

在此处输入图片说明

这意味着“给我所有带属性的功能从‘obj_art’不同NULL(这些数量绝对比0)。从我的角度来看,测试此查询会得出奇怪的结果:

在此处输入图片说明

所以到目前为止我学到的是我可以通过使用

"obj_art" IS NOT NULL

问题是,!= NULL和之间有什么区别IS NOT NULL


据我所知,这只是语法。当为null时,使用is或not。其他使用=或!=
nielsgerrits '16

“一个人会直观地尝试”真的吗?为什么?NULL不是值。从字面上看,这是一个价值的缺失。您不能“等于” NULL!运算符!=不表示“不是”;它的意思是“不等于”。IS NOT意思是“不是”,所以我认为这是非常直观的:)
Lightness与Monica赛跑

@LightnessRacesinOrbit如果没有理解这NULL不是一个值,我会说尝试使用直观,=或者!=因为这就是您评估任何其他值的方式。直到您知道这NULL不是真正意义上的使用价值,IS NOT而不是!=。许多人不知道什么是NULL真正的。
Midavalo

而且,在GUI NULL中,在值列表中(参见上文),因此被视为“正常”值。而且没有按钮IS NULL,还是我错过了?因此,当仅键入此类查询且具有知识时,NULL必须以特殊的方式处理该问题,我们才能讨论有关直觉的问题,但切勿在THIS GUI的上下文中进行讨论。
Jochen Schwarze

@Midavalo:的确如此,我会谦虚地建议不要在不查询语言功能的情况下使用语言功能:)通过猜测进行编程是行不通的。
与莫妮卡(Monica)进行的轻度比赛

Answers:


33

免责声明:由于QGIS中的过滤语法可与SQL一起使用,因此在此假设适用SQL规则。我不完全确定这是否完全正确,但似乎合乎逻辑,并且确实可以解释其行为。


该过滤器可与SQL一起使用,这就是为什么您必须在那里寻找答案的原因。

简而言之,当结合使用逻辑运算符时null,结果始终为null。但是,为了进行测试null,SQL附带了IS (NOT)比较功能,该功能允许您将其用于所需的过滤。

查看Bohemian关于stackoverflow 的答案,进行更深入的讨论。


19

NULL不是一个值,所以并不能等于=或不等于!=任何东西。它与零不同0,后者一个值。

A NULL表示您正在查看的单元格中没有记录任何值。要检查值是否存在,请询问该单元格IS NULL还是该单元格IS NOT NULL

  • IS NULL 检查单元格是否为空
  • IS NOT NULL 检查单元格是否不为空

如果你有一些记录,其中一个值OneTwoThree其余的NULL,你想找到不是万能的Two,你需要使用类似

value != 'Two' OR value IS NULL

因为在等于/不等于查询中不会返回NULL值。如果仅value != 'Three'使用结果,则将排除所有NULL记录,因为NULL该值不能相等或不相等。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.