Як знайти розмір масиву в postgresql


97

Чи є спосіб знайти розмір масиву?

Наприклад,

CREATE TABLE example (id integer[]) ;

INSERT INTO exam VALUES ( '{}');

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

З цього, чи є якісь можливості отримати такий результат, як наступний,

size

0

3

Відповіді:


120

Як згадував Виєгоров, array_lengthзробить свою справу. Або якщо ви знаєте, що масив є одновимірним (що ймовірно) і працює під керуванням PostgreSQL 9.4 або новішої версії, ви можете використовувати cardinality:

SELECT cardinality(id) FROM example;

10
Якщо хтось може згадати велику різницю у використанні array_length та потужність, це було б чудово
Zia Ul Rehman Mughal

6
cardinalityповертає кількість усіх елементів в одному або багатовимірному масиві. Так select cardinality(ARRAY[[1,2], [3,4]]);повернеться 4, тоді як select array_length(ARRAY[[1,2], [3,4]], 1)повернеться 2. Якщо ви рахуєте перший вимір, array_lengthце безпечніша ставка.
Рошамбо,

2
Це також працює для масиву, збереженого в полі з textтипом, while function array_length(text[]) does not exist;)
santuxus

1
@ZiaUlRehmanMughal також довжина масиву порожнього масиву несподівано має значення , nullа не 0тоді cardinalityповертає то , що ви очікували б. Не уявляючи, що вони думали з цією логікою.
EoghanM,

81

Це тривіальні документи для читання :

SELECT array_length(id, 1) FROM example;

13
Чи знаєте ви, що є другим параметром функції array_length. Не знайшов цієї інформації в документах.
suzanshakya

19
@suzanshakya, довжина запитуваного розміру масивуツ
vyegorov 04.03.13

5
Це повернеться, nullі 3замість 0та 3для прикладу OP. Безумовно, слід сприяти використанню під cardinalityчас прийняття відповіді, оскільки це простіше у використанні та менш несподіване (я думаю, 99,999% використання масивів є одновимірними)
EoghanM,


9

Якщо припустити, що розмір масиву завжди буде 1, це не те, що я почуваю себе комфортно, тому я пішов із наступним:

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

Минуло ... принаймні десятиліття, але раніше ми багато робили, coalesceі це було дуже зручно. Можливо, я тягнуся до цього із комфорту?


3

Довелося використовувати array_upper у postgres 8.2.


Рятувальник життя. Оскільки майже всі дописи там використовують array_length (), припускаючи, що люди перебувають на postgres 9+; (
uniquegino
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.