Existe alguma maneira de encontrar o tamanho de uma matriz?
Por exemplo,
CREATE TABLE example (id integer[]) ;
INSERT INTO exam VALUES ( '{}');
INSERT INTO exam VALUES ( '{5,6,7}');
A partir disso, há alguma possibilidade de obter um resultado como seguir,
size
0
3
sql
arrays
postgresql
size
aabi
fonte
fonte
cardinality
retorna o número de todos os elementos em uma matriz única ou multidimensional. Entãoselect cardinality(ARRAY[[1,2], [3,4]]);
voltaria4
, enquantoselect array_length(ARRAY[[1,2], [3,4]], 1)
voltaria2
. Se você está contando a primeira dimensão,array_length
é uma aposta mais segura.text
tipo, enquantofunction array_length(text[]) does not exist
;)null
e não0
enquantocardinality
retorna o que você esperaria. Não tenho ideia do que eles estavam pensando com essa lógica.É trivial ler documentos :
SELECT array_length(id, 1) FROM example;
fonte
array_length
. Não encontrei essa informação nos documentos.null
e em3
vez de0
e3
para o exemplo de OPs. Definitivamente, deve promover o uso decardinality
ao aceitar uma resposta, pois é mais fácil de usar e menos inesperado (imagino que 99,999% do uso de matrizes são unidimensionais)Presumir que a dimensão da matriz sempre será 1 não é algo com que me sinta confortável, então optei pelo seguinte:
SELECT coalesce(array_length(id, 1), 0) as size FROM example;
Já faz ... pelo menos uma década, mas costumávamos fazer muito com
coalesce
e era muito útil. Talvez eu esteja tentando pegá-lo por conforto?fonte
Tive que usar array_upper no postgres 8.2.
fonte