Предложение ‘Not ilike any’ с подстановочным знаком из массива не работает

#sql #postgresql

#sql #postgresql

Вопрос:

Как и в title, следующий код вообще ничего не фильтрует, он возвращает все строки, в то время как без ‘NOT’ он работает просто отлично. В чем проблема?

 create table test (value text);

    insert into test values
    ('Test1'),
    ('foo'),
    ('bar'),
    ('foobar'),
    ('foobar2'),
    ('foobar3'),
    ('foo1bar'),
    ('foo bar'),
    ('barbar');
    
    select *
    FROM test
    WHERE value NOT like any (array['%foo%', '%foo bar%', '%xx%']) 
 

https://www.db-fiddle.com/f/gCFy3K97gQy7gxomAL2Qm7/0

Комментарии:

1. Если вы используете like any , я не вижу 'Test1' , поэтому я не понимаю вашего вопроса.

2. Черт, я пропустил ‘NOT’ в коде здесь.

Ответ №1:

Я предполагаю, что вы имеете not like any в виду, что это не работает. И я думаю, это потому, что вы хотите not like all :

 SELECT *
FROM test
WHERE value  like all (array['%foo%', '%foo bar%', '%xx%']) 
 

Вот скрипка db<> .

Комментарии:

1. Да, «все» вместо any решило это, спасибо