postgresql에서 배열의 크기를 찾는 방법


101

배열의 크기를 찾는 방법이 있습니까?

예를 들어

CREATE TABLE example (id integer[]) ;

INSERT INTO exam VALUES ( '{}');

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

이로부터 다음과 같은 결과를 얻을 수있는 가능성이 있습니까?

size

0

3

답변:


123

vyegorov가 언급했듯이 array_length트릭을 수행합니다. 또는 배열이 1 차원 (아마도)이고 PostgreSQL 9.4 이상을 실행중인 경우 다음을 사용할 수 있습니다 cardinality.

SELECT cardinality(id) FROM example;

10
사람이 array_length 및 카디널리티를 사용하여의 주요 차이를 말할 수 있다면 그 좋은 것
지아 UL 레흐만 무굴

6
cardinality1 차원 또는 다차원 배열에있는 모든 요소의 수를 반환합니다. 그래서 select cardinality(ARRAY[[1,2], [3,4]]);반환 4하는 반면에 select array_length(ARRAY[[1,2], [3,4]], 1)반환 2합니다. 첫 번째 차원을 세는 array_length것이 더 안전한 방법입니다.
Roshambo

2
이것은 text유형이 있는 필드에 저장된 배열에서도 작동합니다 function array_length(text[]) does not exist. while ;)
santuxus

2
@ZiaUlRehmanMughal은 또한 빈 배열의 배열 길이가 예기치 않게 평가되고 예상 되는 것을 반환 null하지 않습니다 . 그들이 그 논리로 무엇을 생각하고 있는지 전혀 모릅니다. 0cardinality
EoghanM

82

사소한 읽기 문서입니다 .

SELECT array_length(id, 1) FROM example;

14
당신이 함수의 두 번째 매개 변수 무엇인지 알고 있습니까 array_length. 문서에서 해당 정보를 찾지 못했습니다.
suzanshakya 2013 년

19
@suzanshakya 요청 된 배열의 길이 치수
vyegorov

5
이것은 반환 null하고 3대신 0하고 3작전의 예를 들어. 사용 cardinality하기 쉽고 예상치 못한 것보다 덜 예상하기 때문에 대답을 받아 들일 때 확실히 사용을 장려해야합니다 (나는 99.999 %의 배열 사용이 1 차원이라고 생각합니다)
EoghanM


10

배열의 차원이 항상 1이라고 가정하는 것은 내가 편한 것이 아니기 때문에 다음과 같이했습니다.

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

적어도 10 년이 지났지 만 우리는 많은 일을 coalesce했고 꽤 편리했습니다. 내가 편안하게 손을 뻗은 것일까?


3

postgres 8.2에서 array_upper를 사용해야했습니다.


생명의 은인. 사람들이 postgres 9+에 있다고 가정하는 거의 모든 게시물이 array_length () 사용하고 있습니다.; (
uniquegino
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.