Apakah ada cara untuk menemukan ukuran larik?
Sebagai contoh,
CREATE TABLE example (id integer[]) ;
INSERT INTO exam VALUES ( '{}');
INSERT INTO exam VALUES ( '{5,6,7}');
Dari sini, adakah kemungkinan untuk mendapatkan hasil seperti berikut,
size
0
3
sql
arrays
postgresql
size
aabi
sumber
sumber
cardinality
mengembalikan jumlah semua elemen dalam larik tunggal atau multidimensi. Jadiselect cardinality(ARRAY[[1,2], [3,4]]);
akan kembali4
, sedangkanselect array_length(ARRAY[[1,2], [3,4]], 1)
akan kembali2
. Jika Anda menghitung dimensi pertama,array_length
itu taruhan yang lebih aman.text
type, whilefunction array_length(text[]) does not exist
;)null
dan bukan0
sementaracardinality
mengembalikan apa yang Anda harapkan. Tidak tahu apa yang mereka pikirkan dengan logika itu.Ini dokumen membaca sepele :
SELECT array_length(id, 1) FROM example;
sumber
array_length
. Tidak menemukan info itu di dokumen.null
dan3
bukannya0
dan3
untuk contoh OP. Pasti harus mempromosikan penggunaancardinality
ketika menerima jawaban karena lebih mudah digunakan dan tidak terlalu terduga (saya membayangkan 99,999% penggunaan array adalah dimensi tunggal)Dengan asumsi dimensi array akan selalu 1 bukanlah sesuatu yang saya rasa nyaman, jadi saya pergi dengan yang berikut:
SELECT coalesce(array_length(id, 1), 0) as size FROM example;
Sudah ... setidaknya satu dekade, tapi kami biasa melakukan banyak
coalesce
hal dan itu sangat berguna. Mungkin saya meraihnya karena kenyamanan?sumber
Harus menggunakan array_upper di postgres 8.2.
sumber