제가 이번에 테스트하기 위하여 쓴 테이블은
CREATE TABLE st (name text, a int[], b int[][] );
입니다.
봉균님이 만드신 테이블의 이름은 줄인것에 지나지 않습니다. (쓰기 편하니까...), 입력한 데이터는
INSERT INTO st VALUES ('a', '{1, 2, 3, 4}', '{{10, 20, 30,40}, {100,200,300,400}}');
입니다. 역시 유별난 것은 없습니다.
이제는 테스트시에 사용한 쿼리인데...
test=> SELECT st.b[1:2][1:1] FROM st;
b
////////////
{{10},{100}}
(1 row)
test=> SELECT st.b[1:2][1:2] FROM st;
b
///////////////////
{{10,20},{100,200}}
(1 row)
test=> SELECT st.b[1:2][1:3] FROM st;
b
//////////////////////////
{{10,20,30},{100,200,300}}
(1 row)
test=> SELECT st.b[1:2][1:4] FROM st;
b
/////////////////////////////////
{{10,20,30,40},{100,200,300,400}}
(1 row)
위의 네가지 테스트를 했습니다.
즉, 정상적인 쿼리가 되었다는 뜻이지요.
이제 설명에 들어가면(너무 느긋한가요?)
st.b[1:2][1:3]
라는 것은
이차원 배열 b 중에서 1차원 부분의 첫번째 부터 2번째
까지([1:2]) 를 우선 선택하고 그 중에서 2차원 부분의
첫 번째 것에서 3번째 것까지([1:3]) 추출한다는 뜻이
됩니다.
구간 추출이니까 [2:3]까지도 되겠지요.
(설명이 좀 어렵나요?)
밑에 다른 형태의 예를 들어 보겠습니다.
CREATE TABLE st (name text, a int[][][]);
INSERT INTO st VALUES ('a', {{1,2,3}, {4,5,6}, {7,8,9}}');
SELECT st.a[2:2][2:2] FROM st;
위의 쿼리는 숫자 "5"를 리턴합니다.
되움이 되었으면 합니다.
인천의 나사 풀린 산호...
|