PostgreSQL НЕ В Множественных Подстановочных знаках - PullRequest
0 голосов
/ 16 октября 2018

Любая идея, почему работает следующее:

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 голосов
/ 16 октября 2018

Почему бы просто не использовать регулярное выражение?

WHERE NOT LOWER(SURV.Title) ~ 'empl|cont|staff'
0 голосов
/ 16 октября 2018

Вы ошиблись в своей логической логике.Рассмотрим, например, строку 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 --------------------^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...