如何在PostgreSQL中查找数组的大小


97

有什么办法可以找到数组的大小吗?

例如,

CREATE TABLE example (id integer[]) ;

INSERT INTO exam VALUES ( '{}');

INSERT INTO exam VALUES ( '{5,6,7}');

由此,是否有可能获得以下结果,

size

0

3

Answers:


120

正如vyegorov所言,array_length将完成任务。或者,如果您知道数组是一维的(可能的话)并且正在运行PostgreSQL 9.4或更高版本,则可以使用cardinality

SELECT cardinality(id) FROM example;

10
如果有人可以提到使用array_length和基数的主要区别,那将是很大的
Zia Ul Rehman Mughal

6
cardinality返回一个或多维数组中所有元素的数量。所以select cardinality(ARRAY[[1,2], [3,4]]);会回来4,而select array_length(ARRAY[[1,2], [3,4]], 1)会回来2。如果您要计算第一个维度,那array_length是一个比较安全的选择。
Roshambo

2
这也适用于保存在text类型为while function array_length(text[]) does not exist;)的字段中的数组
santuxus

1
空数组也@ZiaUlRehmanMughal数组的长度意外的计算结果为null,而不是0,而cardinality回报你的期望。不知道他们在用这种逻辑思考什么。
EoghanM '18 -10-13

81

阅读文档很简单:

SELECT array_length(id, 1) FROM example;

13
你知道什么是函数的第二个参数array_length。在文档中找不到该信息。
suzanshakya

19
@suzanshakya,所请求数组的长度ツ
vyegorov

5
这将返回null3替代03对有机磷农药的例子。绝对应该cardinality在接受答案时促进使用,因为它更易于使用且不太意外(我想数组的99.999%使用都是一维的)
EoghanM


9

假设数组的维数始终为1,这让我感到不满意,因此我进行了以下操作:

SELECT coalesce(array_length(id, 1), 0) as size FROM example;

已经……至少十年了,但是我们过去经常做很多事情,coalesce而且非常方便。也许我是出于安慰而努力?


3

在postgres 8.2中不得不使用array_upper。


救生员。由于几乎所有帖子都使用array_length(),假设人们使用的是postgres 9+;(
uniquegino
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.