Czy istnieje sposób na znalezienie rozmiaru tablicy?
Na przykład,
CREATE TABLE example (id integer[]) ;
INSERT INTO exam VALUES ( '{}');
INSERT INTO exam VALUES ( '{5,6,7}');
Czy na tej podstawie można uzyskać taki wynik,
size
0
3
Odpowiedzi:
Jak wspomniał vyegorov, załatwi sprawę array_length
. Lub jeśli wiesz, że tablica jest 1-wymiarowa (co jest prawdopodobne) i działa na PostgreSQL 9.4 lub nowszym, możesz użyć cardinality
:
SELECT cardinality(id) FROM example;
cardinality
zwraca liczbę wszystkich elementów w jednej lub wielowymiarowej tablicy. Więc select cardinality(ARRAY[[1,2], [3,4]]);
wróci 4
, podczas gdy select array_length(ARRAY[[1,2], [3,4]], 1)
wróci 2
. Jeśli liczysz pierwszy wymiar, array_length
jest to bezpieczniejszy zakład.
text
typem, while function array_length(text[]) does not exist
;)
null
, a nie 0
podczas cardinality
powrotów, czego można oczekiwać. Nie mam pojęcia, co myśleli, kierując się tą logiką.
To trywialne czytanie dokumentów :
SELECT array_length(id, 1) FROM example;
array_length
. Nie znalazłem tych informacji w dokumentach.
null
i 3
zamiast 0
i 3
dla przykładu PO. Zdecydowanie powinien promować używanie cardinality
przy akceptowaniu odpowiedzi, ponieważ jest łatwiejszy w użyciu i mniej nieoczekiwany (wyobrażam sobie, że 99,999% tablic jest jednowymiarowych)
Zakładanie, że wymiar tablicy zawsze będzie wynosił 1, nie jest czymś, z czym czuję się komfortowo, więc zdecydowałem się na następujące:
SELECT coalesce(array_length(id, 1), 0) as size FROM example;
Minęło ... co najmniej dekadę, ale dużo z coalesce
tym robiliśmy i było to całkiem przydatne. Może sięgam po to z wygody?
Musiałem użyć array_upper w postgres 8.2.