본문 바로가기
프로그래밍 공부/Database

MYSQL에서 문자열 SPLIT 하기 - SUBSTRING_INDEX

by 꿀떡스 2021. 6. 27.
반응형

MYSQL에서 문자열 SPLIT 하기 - SUBSTRING_INDEX

 


 

 

MYSQL에서는 SPLIT 함수가 없어서,

SUBSTRING_INDEX 함수를 사용해서 SPLIT 기능을 구현할 수 있습니다.

 

SUBSTRING_INDEX(문자열, 구분자, 구분자의 index)

 

문자열을 시작 or 끝부터 index번째 구분자까지 자르는 것입니다.

 

index가 양수일 경우 문자열의 첫부분부터,

index가 음수일 경우 문자열의 뒷부분부터 자르게됩니다.

 

간단한 예시를 들어보겠습니다.

 

"하나-둘-셋" 이라는 문자열을 구분자 -에 따라 나누어 출력해보겠습니다. 

 

구문 결과
SUBSTRING_INDEX('하나-둘-셋', '-', 1)  하나
SUBSTRING_INDEX('하나-둘-셋', '-', 2)  하나-둘
SUBSTRING_INDEX('하나-둘-셋', '-', 3)  하나-둘-셋
SUBSTRING_INDEX('하나-둘-셋', '-', -1) 
SUBSTRING_INDEX('하나-둘-셋', '-', -2)  둘-셋
SUBSTRING_INDEX('하나-둘-셋', '-', -3)  하나-둘-셋

 

하지만,

이렇게만 사용하면 원래 알고 있던 SPLIT 함수와는 다르게 출력이 됩니다.

 

SPLIT은 배열으로 반환되어 가운데 문자열(예시문자열에서는 "둘")을 가져오고 싶을때

arr = split("하나-둘-셋", "-");

arr[1] --> "둘"

이런식으로 바로 가져올 수 있는데,

 

 SUBSTRING_INDEX 함수는 문자열의 첫부분 혹은 끝부분부터 자르는 함수이기때문에

SPLIT처럼단순하게 출력할 수 없습니다.

 

대신, SUBSTRING을 한번 더 씌우는 방식으로 중간 문자열을 가져올 수 있습니다.

SUBSTRING_INDEX(SUBSTRING_INDEX('하나-둘-셋' '-', -2), '-', 1)

 

설명을 드리자면

 

SUBSTRING_INDEX('하나-둘-셋' '-', -2)  ----결과----> '둘-셋'

 

이 결과값을 한번 더 감싸면,

 

SUBSTRING_INDEX('둘-셋', '-', 1) ----결과----> '둘'

 

이런 결과가 나오게 되는 것입니다.

 

원하는 중간 문자열을 문자열의 맨 첫 위치에 오도록 자른 후,

INDEX를 1로 주면 원하는 문자열만 자를 수 있게 됩니다.

 

혹은, 

SUBSTRING_INDEX(SUBSTRING_INDEX('하나-둘-셋' '-', 2), '-', -1)

반대로 앞에서부터 잘라서 맨 뒷 부분에 오도록 만든 후 

INDEX를 -1로 둘 수도 있습니다.

 

 

 

 

댓글