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

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

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

最佳答案

{} 似乎代表一个空数组,这可以解释值是 NOT NULLARRAY_LENGTH({}) 不返回任何东西——尽管我希望它在 {} 上返回 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 ,似乎那样做把戏。

关于comparison - 测试 Postgresql 数组字段是空还是空的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15638239/

相关文章:

c# - 哪个是比较两位数字的最有效方法?

Java:查找字符串长度时包含空格

c# - c# 中的(签名的)位图比较

sql - 生成带有列值的 json 作为 json 字典键

javascript - IE10 Javascript "Function Expected"

c++ - 为什么将 char* 传递给此方法会失败?

c++ - 在同一个类中定义的这两个函数如何在没有前向声明的情况下相互调用?

javascript - 如何在 JavaScript 中评估第一个 "Who' 上的 ?"as being equal to "s?

python - Google App Engine Django App Admin 登录导致 502

postgresql - 从保留顺序的内部查询中选择有限的字段集