雪花中的不相等究竟如何工作?
How does not equal in snowflake exactly work?
我有一个雪花查询,它有一个名为状态的字段。该字段包含 null 或 'deleted'
当我执行以下操作只删除它时,它起作用了:
select * from tbl_1 where status = 'deleted'
当我尝试排除所有已删除的内容时,它排除了所有内容,没有返回任何记录。这是我试过的
select * from tbl_1 where status != 'deleted'
select * from tbl_1 where status <> 'deleted'
两者都不行。有人能告诉我为什么或在雪花中这样做的正确方法是什么吗?
提前致谢!
您可以尝试以下哪些因素导致状态为空且无法搜索。
select * 来自 tbl_1 其中 IS_NULL_VALUE(状态:no_value) != 'deleted'
https://docs.snowflake.com/en/sql-reference/functions/is_null_value.html
我认为你应该在这里使用 EQUAL_NULL。 EQUAL_NULL 比较两个表达式是否相等。该函数是 NULL-safe,这意味着它将 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
我已经使用以下查询对 return 值 2、3(不是 'deleted')
进行了测试
Select *
from
values (1,'deleted'),(2,NULL),(3,null),(4,'deleted')
WHERE NVL(,'N/A')!='deleted';
因此,对于您的情况,请使用 SQL
select * from tbl_1 where NVL(status,'N/A') != 'deleted';
我有一个雪花查询,它有一个名为状态的字段。该字段包含 null 或 'deleted'
当我执行以下操作只删除它时,它起作用了:
select * from tbl_1 where status = 'deleted'
当我尝试排除所有已删除的内容时,它排除了所有内容,没有返回任何记录。这是我试过的
select * from tbl_1 where status != 'deleted'
select * from tbl_1 where status <> 'deleted'
两者都不行。有人能告诉我为什么或在雪花中这样做的正确方法是什么吗? 提前致谢!
您可以尝试以下哪些因素导致状态为空且无法搜索。
select * 来自 tbl_1 其中 IS_NULL_VALUE(状态:no_value) != 'deleted'
https://docs.snowflake.com/en/sql-reference/functions/is_null_value.html
我认为你应该在这里使用 EQUAL_NULL。 EQUAL_NULL 比较两个表达式是否相等。该函数是 NULL-safe,这意味着它将 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
我已经使用以下查询对 return 值 2、3(不是 'deleted')
进行了测试Select *
from
values (1,'deleted'),(2,NULL),(3,null),(4,'deleted')
WHERE NVL(,'N/A')!='deleted';
因此,对于您的情况,请使用 SQL
select * from tbl_1 where NVL(status,'N/A') != 'deleted';