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;

 

 

 

참고 : https://dzzienki.tistory.com/51