Cách tìm kích thước của mảng trong postgresql


97

Có cách nào để tìm kích thước của một mảng không?

Ví dụ,

CREATE TABLE example (id integer[]) ;

INSERT INTO exam VALUES ( '{}');

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

Từ điều này, có bất kỳ khả năng nào để nhận được kết quả như sau,

size

0

3

Câu trả lời:


120

Như vyegorov đã đề cập, array_lengthsẽ thực hiện thủ thuật. Hoặc nếu bạn biết rằng mảng là 1 chiều (có thể xảy ra) và đang chạy PostgreSQL 9.4 trở lên, bạn có thể sử dụng cardinality:

SELECT cardinality(id) FROM example;

10
Nếu ai cũng có thể đề cập đến sự khác biệt lớn trong việc sử dụng array_length và cardinality rằng sẽ là tuyệt vời
Zia Ul Rehman Mughal

6
cardinalitytrả về số lượng của tất cả các phần tử trong một mảng đơn hoặc nhiều chiều. Vì vậy, select cardinality(ARRAY[[1,2], [3,4]]);sẽ trở lại 4, trong khi select array_length(ARRAY[[1,2], [3,4]], 1)sẽ trở lại 2. Nếu bạn đang tính kích thước đầu tiên, array_lengthlà một đặt cược an toàn hơn.
Roshambo

2
Điều này cũng làm cho một mảng lưu trong một lĩnh vực với textloại, trong khi function array_length(text[]) does not exist;)
santuxus

1
Cũng @ZiaUlRehmanMughal mảng chiều dài của một mảng trống bất ngờ để đánh giá nullvà không 0còn cardinalitylợi nhuận gì bạn mong muốn. Không biết họ đang nghĩ gì với logic đó.
EoghanM

81

Đó là những tài liệu đọc tầm thường :

SELECT array_length(id, 1) FROM example;

13
Bạn có biết tham số thứ hai của hàm là gì không array_length. Không tìm thấy thông tin đó trong tài liệu.
suzanshakya

19
@suzanshakya, chiều dài của mảng yêu cầu chiều
vyegorov

5
Điều này sẽ trả về null3thay vì 03cho ví dụ OPs. Chắc chắn nên khuyến khích sử dụng cardinalitykhi chấp nhận một câu trả lời vì nó dễ dàng hơn để sử dụng và ít bất ngờ (Tôi tưởng tượng 99,999% sử dụng các mảng là đơn chiều)
EoghanM


9

Giả sử thứ nguyên của mảng sẽ luôn là 1 không phải là điều tôi cảm thấy thoải mái, vì vậy tôi đã làm như sau:

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

Đã ... ít nhất một thập kỷ, nhưng chúng tôi đã từng làm rất nhiều coalescevà nó khá tiện dụng. Có lẽ tôi đang tìm kiếm nó vì sự thoải mái?


3

Phải sử dụng array_upper trong postgres 8.2.


Tiết kiệm cuộc sống. Vì hầu hết tất cả các bài đăng trên mạng đều sử dụng array_length () giả sử mọi người đang ở trên postgres 9+; (
uniquegino
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.