我有一个用 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 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
,似乎那样做把戏。
关于comparison - 测试 Postgresql 数组字段是空还是空的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15638239/