Bagaimana menemukan ukuran array di postgresql


98

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

Jawaban:


120

Seperti yang disebutkan vyegorov, array_lengthakan berhasil. Atau jika Anda mengetahui bahwa array tersebut 1 dimensi (yang kemungkinan besar) dan menjalankan PostgreSQL 9.4 atau lebih tinggi, Anda dapat menggunakan cardinality:

SELECT cardinality(id) FROM example;

10
Jika ada yang dapat menyebutkan perbedaan utama dalam menggunakan panjang_larik dan kardinalitas yang akan sangat bagus
— Zia Ul Rehman Mughal

6
cardinalitymengembalikan jumlah semua elemen dalam larik tunggal atau multidimensi. Jadi select cardinality(ARRAY[[1,2], [3,4]]);akan kembali 4, sedangkan select array_length(ARRAY[[1,2], [3,4]], 1)akan kembali 2. Jika Anda menghitung dimensi pertama, array_lengthitu taruhan yang lebih aman.
— Roshambo

2
Ini juga berfungsi untuk array yang disimpan dalam bidang dengan texttype, while function array_length(text[]) does not exist;)
— santuxus

1
@ZiaUlRehmanMughal juga panjang larik dari larik kosong yang secara tak terduga mengevaluasi ke nulldan bukan 0sementara cardinalitymengembalikan apa yang Anda harapkan. Tidak tahu apa yang mereka pikirkan dengan logika itu.
— EoghanM

82

Ini dokumen membaca sepele :

SELECT array_length(id, 1) FROM example;

13
Apakah Anda tahu apa parameter kedua dari fungsi tersebut array_length. Tidak menemukan info itu di dokumen.
— suzanshakya

19
@suzanshakya, panjang dimensi array yang dimintaツ
— vyegorov

5
Ini akan kembali nulldan 3bukannya 0dan 3untuk contoh OP. Pasti harus mempromosikan penggunaan cardinalityketika menerima jawaban karena lebih mudah digunakan dan tidak terlalu terduga (saya membayangkan 99,999% penggunaan array adalah dimensi tunggal)
— EoghanM


9

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 coalescehal dan itu sangat berguna. Mungkin saya meraihnya karena kenyamanan?


3

Harus menggunakan array_upper di postgres 8.2.


Penolong. Karena hampir semua posting di luar sana menggunakan array_length () dengan asumsi orang menggunakan postgres 9+; (
— uniquegino
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.