Postgresql'de bir dizinin boyutu nasıl bulunur


98

Bir dizinin boyutunu bulmanın bir yolu var mı?

Örneğin,

CREATE TABLE example (id integer[]) ;

INSERT INTO exam VALUES ( '{}');

INSERT INTO exam VALUES ( '{5,6,7}');

Bundan aşağıdaki gibi bir sonuç alma olasılığı var mı

size

0

3

Yanıtlar:


120

Vyegorov'un bahsettiği gibi, array_lengthhile yapacak. Ya da dizinin 1 boyutlu olduğunu (büyük olasılıkla) biliyorsanız ve PostgreSQL 9.4 veya daha üstünü çalıştırıyorsanız, şunları kullanabilirsiniz cardinality:

SELECT cardinality(id) FROM example;

10
Herkes array_length ve önem düzeyi kullanarak büyük bir fark söz Eğer bu harika olurdu
Ziya Ul Rehman Babür

6
cardinalityTek veya çok boyutlu bir dizideki tüm öğelerin sayısını döndürür. Böylece select cardinality(ARRAY[[1,2], [3,4]]);geri dönecekti 4, oysa select array_length(ARRAY[[1,2], [3,4]], 1)geri dönecekti 2. İlk boyutu sayıyorsanız, array_lengthdaha güvenli bir bahis.
Roshambo

2
Bu aynı zamanda, texttype ile bir alana kaydedilen bir dizi için de işe function array_length(text[]) does not exist
yarar

1
Boş bir dizinin de @ZiaUlRehmanMughal dizi uzunluk beklenmedik sonucunu nulldeğil, 0oysa cardinalitygetiri beklediğiniz. Bu mantıkla ne düşündüklerine dair hiçbir fikrim yok.
EoghanM

82

Belgeleri okumak önemsiz :

SELECT array_length(id, 1) FROM example;

13
Eğer fonksiyonun ikinci parametresi ne biliyor musunuz array_length. Bu bilgiyi belgelerde bulamadım.
suzanshakya

19
@suzanshakya, istenen dizi boyutunun uzunluğuツ
vyegorov

5
Bu dönecektir nullve 3yerine 0ve 3OP örneğin. Kullanımı cardinalitydaha kolay ve daha az beklenmedik olduğu için bir cevabı kabul ederken kullanımını kesinlikle teşvik etmeliyim (dizilerin%
99,999'unun


9

Dizinin boyutunun her zaman 1 olacağını varsaymak, kendimi rahat hissettiğim bir şey değildir, bu yüzden aşağıdakileri yaptım:

SELECT coalesce(array_length(id, 1), 0) as size FROM example;

En azından on yıl oldu, ama eskiden çok şey yapardık coalesceve oldukça kullanışlıdır. Belki ona rahatlıktan ulaşıyorum?


3

Postgres 8.2'de array_upper kullanmak gerekiyordu.


Hayat kurtarıcı. Neredeyse tüm gönderiler gibi array_length () kullanılıyor, insanların postgres 9+; (
uniquegino
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.