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_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;
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.
texttype ile bir alana kaydedilen bir dizi için de işe function array_length(text[]) does not exist
nulldeğil, 0oysa cardinalitygetiri 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.
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%
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?
Postgres 8.2'de array_upper kullanmak gerekiyordu.