UNNEST 함수
배열(array)을 row로 변경
SELECT unnest(ARRAY['V1','V2','V3','V4','V5']) AS c1 ;
c1
----
V1
V2
V3
V4
V5
(5 rows)
배열 개수가 다른경우 NULL 로 표시함
select * from unnest(ARRAY[1,2], ARRAY['foo','bar','baz']) as x(a,b);
a | b
---+-----
1 | foo
2 | bar
| baz
구분자가 있는 컬럼을 행으로 변경
테스트 테이블
select * from tab1;
id | text_data
----+---------------------
1 | apple,orange,banana
2 | dog,cat,bird,fish
3 | red,green,blue
(3 rows)
쉼표를 구분자로 배열로 변환
SELECT id, string_to_array(text_data,',') AS text_array
FROM tab1
;
id | text_array
----+-----------------------
1 | {apple,orange,banana}
2 | {dog,cat,bird,fish}
3 | {red,green,blue}
(3 rows)
쉼표로 구분된 열을 행으로 변경
SELECT id, unnest(string_to_array(text_data,',')) AS text_array
FROM tab1
;
id | text_array
----+------------
1 | apple
1 | orange
1 | banana
2 | dog
2 | cat
2 | bird
2 | fish
3 | red
3 | green
3 | blue
(10 rows)
regexp_split_to_table 함수 사용
SELECT id, regexp_split_to_table(text_data,',') FROM tab1 ;
id | regexp_split_to_table
----+-----------------------
1 | apple
1 | orange
1 | banana
2 | dog
2 | cat
2 | bird
2 | fish
3 | red
3 | green
3 | blue
(10 rows)
여러개 컬럼을 행으로 변경
cross join lateral 사용
-- 테스트 테이블
SELECT * FROM tab2 ;
id | column1 | column2 | column3
----+---------+---------+---------
1 | 10 | 20 | 30
2 | 40 | 50 | 60
(2 rows)
-- cross join lateral 사용
SELECT c1
FROM tab2
CROSS JOIN LATERAL (
VALUES (column1), (column2), (column3)
) AS t(c1);
c1
----
10
20
30
40
50
60
(6 rows)
'DBMS > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] pg_hba.conf 우선순위 (2) | 2024.02.01 |
---|---|
[PostgreSQL] 데이터 이관 시 ERROR: permission denied for schema (1) | 2024.01.29 |
[PostgreSQL] ANY 연산자 (1) | 2024.01.01 |
[PostgreSQL] 자동 증가(Auto Increment) 컬럼 사용법 (1) | 2023.12.15 |
[PostgreSQL] unlogged/logged table 성능비교 (0) | 2023.12.14 |
댓글