Check if NULL exists in Postgres array

前端 未结 4 794
既然无缘
既然无缘 2020-12-03 17:43

Similar to this question, how can I find if a NULL value exists in an array?

Here are some attempts.

SELECT num, ar, expected,
  ar @> ARRAY[NULL]         


        
4条回答
  •  無奈伤痛
    2020-12-03 18:29

    PostgreSQL 9.5 (I know you spcified 9.1, but anyway) has the array_position() function to do just what you want without having to use the horribly inefficient unnest() for something as trivial as this (see test4):

    patrick@puny:~$ psql -d test
    psql (9.5.0)
    Type "help" for help.
    
    test=# SELECT num, ar, expected,
      ar @> ARRAY[NULL]::int[] AS test1,
      NULL = ANY (ar) AS test2,
      array_to_string(ar, ', ') <> array_to_string(ar, ', ', '(null)') AS test3,
      coalesce(array_position(ar, NULL::int), 0) > 0 AS test4
    FROM (
      SELECT 1 AS num, '{1,2,NULL}'::int[] AS ar, true AS expected
      UNION SELECT 2, '{1,2,3}'::int[], false
    ) td ORDER BY num;
     num |     ar     | expected | test1 | test2 | test3 | test4
    -----+------------+----------+-------+-------+-------+-------
       1 | {1,2,NULL} | t        | f     |       | t     | t
       2 | {1,2,3}    | f        | f     |       | f     | f
    (2 rows)
    

提交回复
热议问题