我有一个用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或更长的长度,但这看起来像是一个讨厌的黑客。测试这个的正确方法是什么?
奖金问题:{}
究竟代表什么?我一直无法编写将返回该值的select语句。 ARRAY[]
引发错误,ARRAY[""]
返回{""}
,ARRAY[NULL]
返回{NULL}
等。
答案 0 :(得分:5)
{}
似乎代表一个空数组,它可以解释值NOT NULL
和ARRAY_LENGTH({})
没有返回任何内容 - 尽管我希望它在{{1}上返回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()
的空值失去理智,似乎就是这样做。