微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个用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或其他.问题是{}值不为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}等.

解决方法

{}似乎代表一个空数组,它可以解释值为NOT NULL和ARRAY_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的值)失去理智,似乎就是这样做了.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐