DataBase/PostgreSQL
[PostgreSQL] 구분자로 구분된 문자열을 array 배열로 받기(split_part, string_to_array, unnest)
개발하는 까꿍이
2022. 2. 21. 21:10

fruit table이 아래와 같은 데이터가 있다고 가정하자.
id
|
data
|
과일
|
사과|수박|딸기|오렌지|바나나
|
1. split_part
:: 문자열을 구분자로 나눈 다음 몇 번째에 위치한 데이터를 가져오는 함수
먼저, split_part 를 사용하여 구분자로 구분하고 2번째에 위치한 데이터를 불러보자.
select split_part(data,'|',2) as 두번째_과일 from fruit where id='과일'
* 2를 뺄 경우, 오류가 발생한다.

2. string_to_array
:: 문자열을 구분자로 구분하여 배열로 만드는 함수
문자열을 '|'로 구분하여 배열로 반환하는 쿼리문을 만들어보자.
select string_to_array(data, '|') from fruit where id='과일'

3. unnest
:: 배열로 된 데이터를 row로 만들어주는 함수
문자열을 배열로 만든 후 unnest를 사용하여 row로 반환하자.
select unnest(string_to_array(data, '|')) from fruit where id='과일'

4. 전체 실행 코드
해당 쿼리문을 실행하여 보시고 싶으신 분들은 아래 코드를 참고하시면 됩니다.
with fruit(id, data) as (
values('과일', '사과|수박|딸기|오렌지|바나나')
)
select * from fruit select split_part(data,'|',2) as 두번째_과일 from fruit where id='과일'
select string_to_array(data, '|') from fruit where id='과일'
select unnest(string_to_array(data, '|')) from fruit where id='과일'
5. 자주 활용하는 코드
상황
- frontend에서 문자열로 삭제할 seq를 넘겼을 때
- "1,3,5,7"
- 삭제할 seq : 1,3,5,7
- 구분자 : ,
쿼리문
delete
from sample_table
where seq in (select unnest(string_to_array('1,3,5,7', ','))::numberic;