2012-10-07 2 views

답변

12

나는 당신이 예를 잘못 해석하고 생각합니다. PostgreSQL의 배열은 n 1에서 인덱싱 할 that's just the default이 없어 기본적으로

PostgreSQL의이 배열 한 계 넘버링 규칙을 사용, 즉 N 요소들의 어레이를 array[1] 시작 array[n]으로 끝납니다.

SELECT f1[1][-2][3] AS e1, f1[1][-1][5] AS e2 
FROM (SELECT '[1:1][-2:-1][3:5]={{{1,2,3},{4,5,6}}}'::int[] AS f1) AS ss; 

하지만 그 음수는 Perl과 같은 언어와 같은 배열의 끝에서 인덱싱되지 않습니다

당신이보고있는 예는 이것이다. FROM (SELECT ... 부분에서 그들은 시작 및 종료 인덱스를 지정하므로 f1[1][-1][5]의 -1은 단순한 오래된 인덱스입니다. 이 array_dims 결과를 고려

=> SELECT array_dims('[1:1][-2:-1][3:5]={{{1,2,3},{4,5,6}}}'::int[]); 
    array_dims  
------------------- 
[1:1][-2:-1][3:5] 

당신은 당신이 간단한 arr[array_length(arr, 1)]와 마지막 요소를 얻을 수있는 기본 1 기반의 배열을 사용하는 경우. 기본 [1:n] 배열을 사용하지 않는 경우 첫 번째 요소와 마지막 요소를 가져 오려면 array_lowerarray_upper을 사용해야합니다. 또는 상황에 따라 unnest을 사용하여 배열의 압축을 풀고 배열을 행 집합으로 사용할 수 있습니다.

어떤 배열 "도착"를
3

는 도착 이용해 배열의 마지막 요소를 가져

SELECT arr[array_upper(arr, 1)]; 
관련 문제