测试Postgresql数组字段是空还是空的正确方法是什么

时间:2013-03-25 20:26:16

标签: comparison postgresql function arrays null

我有一个用integer_array字段定义的表。它包含以下数据:

 id | black_list 
----+------------
  4 |            
  5 |            
  8 |            
 12 |            
  6 |            
  7 |            
 10 | {5}        
 13 | {5}        
  3 | {}         
  9 | {3}        
 11 | {}         
 14 | {}         
  1 | {}         
  2 | {}         
 15 | {}         
 16 | {}         
 17 | {}         
(17 rows)

我需要编写一个查询来查看数组字段是否为空 - NULL或其他。问题是{}值不为空,也不从ARRAY_LENGTH函数返回任何长度。 http://www.postgresql.org/docs/8.4/static/functions-array.html中列出的其他数组函数似乎都不是我需要的。我发现我可以写ARRAY_LENGTH(0 || black_list)让所有这些都返回1或更长的长度,但这看起来像是一个讨厌的黑客。测试这个的正确方法是什么?

奖金问题:{}究竟代表什么?我一直无法编写将返回该值的select语句。 ARRAY[]引发错误,ARRAY[""]返回{""}ARRAY[NULL]返回{NULL}等。

1 个答案:

答案 0 :(得分:5)

{}似乎代表一个空数组,它可以解释值NOT NULLARRAY_LENGTH({})没有返回任何内容 - 尽管我希望它在{{1}上返回0也许那是我不熟悉的PostgreSQL特性。

您是否有理由不能仅仅测试{}的返回值,例如

ARRAY_LENGTH

假设SELECT id FROM table WHERE ARRAY_LENGTH(black_list, 1) IS NULL OR ARRAY_LENGTH(black_list, 1) < 1 并未对上述示例中ARRAY_LENGTH()的空值失去理智,似乎就是这样做。