【问题标题】:What's the proper way to test if a Postgresql array field is either null or empty测试 Postgresql 数组字段是否为空或为空的正确方法是什么
【发布时间】:2013-03-16 07:37:07
【问题描述】:

我有一个用 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},等等

【问题讨论】:

  • 我意识到我可以只写倒数并测试长度是否大于 0,但我想知道为什么似乎没有办法测试它方式;
  • {} 似乎代表一个空数组,这可以解释值不是 NULL 和 ARRAY_LENGTH({}) 不返回任何内容——尽管我希望它在 {} 上返回 0,也许这是我不熟悉的 PostgreSQL 特性。是否有理由不能只测试 ARRAY_LENGTH 的返回值,例如'SELECT id FROM table WHERE ARRAY_LENGTH(black_list) IS NULL OR ARRAY_LENGTH(black_list)
  • (我目前没有方便的 Postgre 服务器进行测试,因此我之前的评论中有未经测试的查询。对不起,如果我把你送进了一条死胡同。)
  • 是的,实际上ARRAY_LENGTH(provider_black_list, 1) IS NULL 工作得很好。感谢您的建议。
  • 没问题!我会用它来回答的。

标签: comparison postgresql function arrays null


【解决方案1】:

{} 似乎代表一个空数组,这可以解释值是 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)失去理智,这似乎可以解决问题。

【讨论】:

  • 有效!完全不是我期望的那样,它简化了我之前的查询并且读起来很好。
  • BTW - ARRAY_LENGTH(black_list, 1) IS NULL 可以正确测试空的 {} 值和 NULL 值,因此无需另外测试 &lt; 1
  • 我不得不在答案中使用“IS NULL”。当我尝试'= NULL'时它不起作用。奇怪,但你的方法有效:)
  • @itsols 那是因为测试任何东西,包括 NULL 是否与 NULL 相等都会返回 NULL。为什么会这样,我不知道,但仍然值得知道。
猜你喜欢
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多