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로 둘 수도 있습니다.
'프로그래밍 공부 > Database' 카테고리의 다른 글
ORACLE) ERROR: LONG 값은 LONG 열에 삽입할 때만 바인드할 수 있습니다. 에러문 원인 (0) | 2021.04.03 |
---|
댓글