Я пытаюсь написать простой запрос с функцией массива в PostgreSQL, но, похоже, он не работает должным образом.
WITH vars AS (
SELECT array['1114156957', '1234'] as npi
)
SELECT CASE
when '1114156957' <> ANY(npi) then 'Not Found'
ELSE 'found'
End as test
FROM vars;
Я новичок в Postgres и никогда раньше не использовал функцию массива. Но разве в приведенном выше запросе результат не должен быть «Найден», поскольку в массиве существует одно из значений?


'1114156957' <> ANY(..) означает: «'1114156957' не равно любой значений в массиве. Или, наоборот:« не равно хотя бы одному элементу в массиве ».
Поскольку есть одно значение, которое действительно не равно, условие '1114156957' <> ANY(npi) выполняется.
Если вы хотите проверить, не содержится ли элемент в массиве вообще, вам нужно использовать <> ALL().
WITH vars(npi) AS (
values (array['1114156957', '1234'])
)
SELECT CASE
when '1114156957' = ALL(npi) then 'Not Found'
ELSE 'found'
End as test
FROM vars;
возвращает 'Found'
Онлайн-пример: http://rextester.com/UDBNH6876