知道以下内容为何有效:
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/