如何解决雪花中的不相等如何正确运作?
我有一个雪花查询,其中包含一个名为status的字段。该字段包含null或“已删除”
当我执行以下操作以仅删除它时,它会起作用:
select * from tbl_1 where status = 'deleted'
当我尝试排除所有已删除的内容时,它将排除所有内容,不返回任何记录。这是我尝试过的
select * from tbl_1 where status != 'deleted'
select * from tbl_1 where status <> 'deleted'
没有人起作用。有人可以告诉我为什么,或者在雪花中这样做的正确方法是什么? 预先感谢!
解决方法
您可以尝试以下哪些因素导致状态为空且无法为您搜索。
从tbl_1中选择*,其中IS_NULL_VALUE(status:no_value)!='已删除'
https://docs.snowflake.com/en/sql-reference/functions/is_null_value.html
,我认为您应该在此处使用EQUAL_NULL。 EQUAL_NULL比较两个表达式是否相等。该函数是NULL安全的,这意味着它将NULL视为用于比较相等性的已知值。请注意,这不同于EQUAL比较运算符(=),后者将NULL视为未知值。
https://docs.snowflake.com/en/sql-reference/functions/equal_null.html#equal-null
CREATE TABLE NULL_TEST(PRODUCT VARCHAR,STATUS VARCHAR);
INSERT INTO NULL_TEST VALUES('1111','DELETED');
INSERT INTO NULL_TEST VALUES('1112',NULL);
select * from NULL_TEST where NOT EQUAL_NULL(status,'DELETED');
,
使用NVL
是因为它只是将NULL转换为另一个可以比较的值
NVL
文档here
我已经测试过使用以下查询返回值2、3(未“删除”)
Select *
from
values (1,'deleted'),(2,NULL),(3,null),(4,'deleted')
WHERE NVL($2,'N/A')!='deleted';
因此,对于您的情况,请使用SQL
select * from tbl_1 where NVL(status,'N/A') != 'deleted';
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。