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:
Vyegorov'un bahsettiği gibi, array_length
hile 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;
cardinality
Tek 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_length
daha güvenli bir bahis.
text
type ile bir alana kaydedilen bir dizi için de işe function array_length(text[]) does not exist
null
değil, 0
oysa cardinality
getiri beklediğiniz. Bu mantıkla ne düşündüklerine dair hiçbir fikrim yok.
Belgeleri okumak önemsiz :
SELECT array_length(id, 1) FROM example;
array_length
. Bu bilgiyi belgelerde bulamadım.
null
ve 3
yerine 0
ve 3
OP örneğin. Kullanımı cardinality
daha kolay ve daha az beklenmedik olduğu için bir cevabı kabul ederken kullanımını kesinlikle teşvik etmeliyim (dizilerin%
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 coalesce
ve oldukça kullanışlıdır. Belki ona rahatlıktan ulaşıyorum?
Postgres 8.2'de array_upper kullanmak gerekiyordu.