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.