sql - PostgreSQL 不在多个通配符中

标签 sql postgresql select postgresql-9.6

知道以下内容为何有效:

SELECT ID, Name FROM dbo.Survey SURV
WHERE (SURV.Title ILIKE ANY (ARRAY['%Empl%', '%Cont%', '%Staff%']))

但这不是:

SELECT ID, Name FROM dbo.Survey SURV
WHERE (SURV.Title NOT ILIKE ANY (ARRAY['%Empl%', '%Cont%', '%Staff%']))

我没有收到错误,但是,第一个查询似乎返回了所有正确的结果,而第二个查询似乎没有从我的结果集中删除任何记录。

请注意:SURV.Title 列中没有任何 NULL 值。

最佳答案

您的 bool 逻辑有误。例如,考虑字符串 abcEmplxyz。它 ILIKE '%Empl%',但不是 ILIKE '%Cont%',所以它会被退回。当您否定这样的 bool 条件时,您需要将 any 替换为 all:

SELECT ID, Name FROM dbo.Survey SURV
WHERE (SURV.Title NOT ILIKE ALL (ARRAY['%Empl%', '%Cont%', '%Staff%']))
-- Here --------------------^

关于sql - PostgreSQL 不在多个通配符中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52840175/

相关文章:

php - 如何使用 PHP 中的选择选项从数据库中检索所有数据?

sql - SQL Server : Output data frame into a table 中的 R

sql - 加入并更新同一列sql server

node.js - 如何 INSERT 到包含自动生成值(如 "createdAt"和 "updatedAt")的列的表?

postgresql - 如何查找从 PSQL 中的另一个表继承的子表

sql - 计算今天与 Oracle SQL 中的雇佣日期之间的天数?

sql - 在内部使用 OUTPUT/INTO 而不是插入触发器会使 'inserted' 表无效

javascript - 在应用程序开始时检查数据库中的 bool 值,如果为假则加载条款和条件页面,如果为真则加载菜单页面

PostgreSQL 分区语法 FOR VALUES

使用 SELECT 更新 MySQL(将 "item"标记为已读)