5

我有一个用 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 或更大的长度,但这似乎是一个讨厌的 hack。测试这个的正确方法是什么?

奖金问题:到底{}代表什么?我一直无法编写将返回该值的选择语句。ARRAY[]抛出错误,ARRAY[""]返回{""}ARRAY[NULL]返回{NULL}等。

4

1 回答 1

6

{}似乎代表一个空数组,这可以解释值是NOT NULLARRAY_LENGTH({})不返回任何东西——尽管我希望它在 0 上返回 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()不会对空值(id=12例如上面示例中的 for )失去理智,这似乎可以解决问题。

于 2013-03-25T21:47:50.723 回答