¿Hay alguna forma de encontrar el tamaño de una matriz?
Por ejemplo,
CREATE TABLE example (id integer[]) ;
INSERT INTO exam VALUES ( '{}');
INSERT INTO exam VALUES ( '{5,6,7}');
A partir de esto, ¿hay alguna posibilidad de obtener un resultado como el siguiente,
size
0
3
sql
arrays
postgresql
size
aabi
fuente
fuente
cardinality
devuelve el número de todos los elementos de una matriz única o multidimensional. Entoncesselect cardinality(ARRAY[[1,2], [3,4]]);
volvería4
, mientrasselect array_length(ARRAY[[1,2], [3,4]], 1)
que volvería2
. Si está contando la primera dimensión,array_length
es una apuesta más segura.text
tipo, mientrasfunction array_length(text[]) does not exist
;)null
y no0
mientrascardinality
devuelve lo que esperaría. No tengo idea de lo que estaban pensando con esa lógica.Son documentos de lectura triviales :
SELECT array_length(id, 1) FROM example;
fuente
array_length
? No encontré esa información en los documentos.null
y en3
lugar de0
y3
para el ejemplo de OP. Definitivamente debería promover el uso decardinality
al aceptar una respuesta, ya que es más fácil de usar y menos inesperado (imagino que el uso del 99,999% de las matrices es unidimensional)Asumir que la dimensión de la matriz siempre será 1 no es algo con lo que me sienta cómodo, así que elegí lo siguiente:
SELECT coalesce(array_length(id, 1), 0) as size FROM example;
Ha pasado ... al menos una década, pero solíamos hacer mucho con
coalesce
él y fue bastante útil. ¿Quizás lo estoy buscando por comodidad?fuente
Tuve que usar array_upper en postgres 8.2.
fuente