有没有办法找到一个数组的大小?
例如:
CREATE TABLE example (id integer[]) ;
INSERT INTO example VALUES ( '{}');
INSERT INTO example VALUES ( '{5,6,7}');
从这个例子中,有没有可能得到以下结果:
size
0
3
有没有办法找到一个数组的大小?
例如:
CREATE TABLE example (id integer[]) ;
INSERT INTO example VALUES ( '{}');
INSERT INTO example VALUES ( '{5,6,7}');
从这个例子中,有没有可能得到以下结果:
size
0
3
array_length
可以解决问题。或者,如果您知道数组是一维的(很可能),并且正在运行PostgreSQL 9.4或更高版本,则可以使用cardinality
:SELECT cardinality(id) FROM example;
阅读文档很容易:
SELECT array_length(id, 1) FROM example;
array_length
的第二个参数是什么吗?我在文档中没有找到相关信息。 - suzanshakyanull
和3
,而不是0
和3
。在接受答案时肯定应该推荐使用cardinality
,因为它更易于使用且不会产生意外效果(我想99.999%的数组使用都是单维的)。 - EoghanM我不太舒服假设数组的尺寸总是为1,因此我选择了以下方式:
SELECT coalesce(array_length(id, 1), 0) as size FROM example;
过去至少十年了,但我们曾经经常使用 coalesce
,它非常方便。也许我只是出于习惯而寻找它?
在PostgreSQL 8.2中,必须使用“array_upper”函数。
cardinality
函数返回单个或多维数组中所有元素的数量。因此,select cardinality(ARRAY[[1,2], [3,4]]);
将返回4
,而select array_length(ARRAY[[1,2], [3,4]], 1)
将返回2
。如果您想计算第一维度的长度,则使用array_length
更为可靠。 - Roshambotext
类型字段中的数组,而function array_length(text[]) does not exist
(意为“函数array_length(text[])不存在”);)。 - santuxusnull
而不是0
,而cardinality
返回你所期望的结果。不知道他们当时在想什么逻辑。 - EoghanMcardinality
... 我认为像array_size
这样的名称更加直观 - Hiroki