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;
cardinalityzwraca 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_lengthjest to bezpieczniejszy zakład.
texttypem, while function array_length(text[]) does not exist;)
null, a nie 0podczas cardinalitypowrotó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.
nulli 3zamiast 0i 3dla przykładu PO. Zdecydowanie powinien promować używanie cardinalityprzy 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 coalescetym 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.