gpt4 book ai didi

sql - postgresql NOT ILIKE 子句不包括空字符串值

转载 作者:行者123 更新时间:2023-11-29 11:10:29 25 4
gpt4 key购买 nike

这是 Postgresql 9.2.4 上的设置:

CREATE TABLE table (
id integer NOT NULL,
some_text text
);

现在我们输入一条记录,some_text 为 null 或空字符串,这样当我们查询时:

SELECT * FROM table WHERE some_text IS NULL;

我拿回了条目。到目前为止一切顺利。

但是,当我查询时:

SELECT * FROM table WHERE some_text NOT ILIKE "%anything%';

我发现没有返回任何内容。这是为什么?我希望 null 或空字符串“不像 anything”。

最佳答案

在 SQL 中,NULL 不等于任何东西。它也不等于任何东西。

也就是说,如果我不告诉你我的中间名,你也不告诉我你的中间名,我们怎么知道我们两个中间名是同名还是不同名呢?我们不知道。

这经常使人们在 SQL 中出错,因为它是“三值逻辑”。表达式可以是 TRUE、FALSE 或 UNKNOWN。熟悉 bool 代数的人都知道 NOT TRUE 就是 FALSE,NOT FALSE 就是 TRUE。

但棘手的部分是 NOT UNKNOWN 仍然是 UNKNOWN。

因此,您的解决方案是始终在您的列中存储一个非空字符串,或者使用表达式来说明三值逻辑:

SELECT * FROM table WHERE some_text NOT ILIKE "%anything%' OR some_text IS NULL;

或者:

SELECT * FROM table WHERE COALESCE(some_text, '') NOT ILIKE '%anything%';

PostgreSQL 还支持 null-safe equality operator :

SELECT * FROM table WHERE some_text IS DISTINCT FROM 'anything';

但不幸的是,这只适用于相等,不适用于带有模式和通配符的 LIKE/ILIKE。

关于sql - postgresql NOT ILIKE 子句不包括空字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18243755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com