代码之家  ›  专栏  ›  技术社区  ›  jackstraw22

Postgres数组案例问题[重复]

  •  0
  • jackstraw22  · 技术社区  · 7 年前

    我试图用PostgreSQL中的array函数编写一个简单的查询,但它似乎不能正常工作。

    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 回复  |  直到 7 年前
        1
  •  2
  •   a_horse_with_no_name    7 年前

    '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