Postgres阵列案例问题

时间:2018-09-18 14:04:18

标签: sql arrays postgresql

我正在尝试使用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的新手,以前从未使用过数组函数。但是在上面的查询中,由于数组中存在一个值,因此结果不应该“找到”吗?

1 个答案:

答案 0 :(得分:2)

'1114156957' <> ANY(..)的意思是:“'1114156957'不等于数组中的任何个值。或者换句话说:“不等于至少一个数组中的元素”。

由于存在一个确实不相等的值,因此条件'1114156957' <> ANY(npi)为true。

如果要检查数组中是否根本不包含任何元素,则需要使用<> 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