Чи є спосіб знайти розмір масиву?
Наприклад,
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.