PostgreSQL不在多个通配符中

时间:2018-10-16 16:35:59

标签: 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值。

2 个答案:

答案 0 :(得分:2)

您的布尔逻辑有误。考虑例如字符串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 --------------------^

答案 1 :(得分:0)

为什么不只使用正则表达式?

WHERE NOT LOWER(SURV.Title) ~ 'empl|cont|staff'