你知道为什么下面的方法有效吗
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
值。 最佳答案
你的布尔逻辑出错了。例如,考虑字符串abcEmplxyz
。它是ILIKE '%Empl%'
,但不是ILIKE '%Cont%'
,因此将被返回。当您否定这样的布尔条件时,您需要用any
替换all
:
SELECT ID, Name FROM dbo.Survey SURV
WHERE (SURV.Title NOT ILIKE ALL (ARRAY['%Empl%', '%Cont%', '%Staff%']))
-- Here --------------------^