Чи є спосіб знайти розмір масиву?
Наприклад,
CREATE TABLE example (id integer[]) ;
INSERT INTO exam VALUES ( '{}');
INSERT INTO exam VALUES ( '{5,6,7}');
З цього, чи є якісь можливості отримати такий результат, як наступний,
size
0
3
Відповіді:
Як згадував Виєгоров, array_length
зробить свою справу. Або якщо ви знаєте, що масив є одновимірним (що ймовірно) і працює під керуванням PostgreSQL 9.4 або новішої версії, ви можете використовувати cardinality
:
SELECT cardinality(id) FROM example;
cardinality
повертає кількість усіх елементів в одному або багатовимірному масиві. Так select cardinality(ARRAY[[1,2], [3,4]]);
повернеться 4
, тоді як select array_length(ARRAY[[1,2], [3,4]], 1)
повернеться 2
. Якщо ви рахуєте перший вимір, array_length
це безпечніша ставка.
text
типом, while function array_length(text[]) does not exist
;)
null
а не 0
тоді cardinality
повертає то , що ви очікували б. Не уявляючи, що вони думали з цією логікою.
Це тривіальні документи для читання :
SELECT array_length(id, 1) FROM example;
array_length
. Не знайшов цієї інформації в документах.
null
і 3
замість 0
та 3
для прикладу OP. Безумовно, слід сприяти використанню під cardinality
час прийняття відповіді, оскільки це простіше у використанні та менш несподіване (я думаю, 99,999% використання масивів є одновимірними)
Якщо припустити, що розмір масиву завжди буде 1, це не те, що я почуваю себе комфортно, тому я пішов із наступним:
SELECT coalesce(array_length(id, 1), 0) as size FROM example;
Минуло ... принаймні десятиліття, але раніше ми багато робили, coalesce
і це було дуже зручно. Можливо, я тягнуся до цього із комфорту?
Довелося використовувати array_upper у postgres 8.2.