PostgreSQL 不在多个通配符中

ByR*_*est 4 sql postgresql select postgresql-9.6

知道为什么以下方法有效:

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

但这并不:

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

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

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

Mur*_*nik 7

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

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