加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:33:46 所属栏目:百科 来源:网络整理
导读:这是 Postgresql 9.2.4上的设置: CREATE TABLE table ( id integer NOT NULL,some_text text); 现在我们输入一个记录,一个null或空字符串为some_text,所以当我们查询: SELECT * FROM table WHERE some_text IS NULL; 我得到回来到现在为止还挺好. 但是,当
这是 Postgresql 9.2.4上的设置:
CREATE TABLE table (
    id integer NOT NULL,some_text text
);

现在我们输入一个记录,一个null或空字符串为some_text,所以当我们查询:

SELECT * FROM table WHERE some_text IS NULL;

我得到回来到现在为止还挺好.

但是,当我查询:

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

我发现没有任何回报.这是为什么?我希望一个空或空字符串是“不像任何东西”.

在SQL中,NULL不等于任何东西.任何事情也不平等.

换句话说,如果我不告诉你我的中间名,你不告诉我你的中间名,我们怎么知道我们的两个中间名是相同的名字或不同的名字?我们不知道

这通常会在SQL中跳过人,因为它是“三值逻辑”.表达式可以为TRUE,FALSE或UNKNOWN.我们熟悉布尔代数的人知道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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读