MySQL의 SUBSTRING_INDEX() 함수는 주어진 문자열에서 지정한 구분자(delimiter)가 N번째로 나타나기 전까지의 부분 문자열을 반환하는 함수입니다. 몇 번째 등장 위치를 기준으로 자를지는 인자를 통해 지정할 수 있으며, 이메일 도메인 추출, URL 파싱, CSV 형태 데이터 분리 등 다양한 상황에서 유용하게 활용됩니다.
문법(Syntax)
SUBSTRING_INDEX(Str, delim, count)
각 인자의 의미는 다음과 같습니다.
- Str: 부분 문자열을 추출할 대상이 되는 원본 문자열입니다.
- delim: 문자열 내에서 검색할 구분자입니다.
- count: 구분자를 검색할 횟수입니다. 양수면 왼쪽(앞)에서부터, 음수면 오른쪽(뒤)에서부터 계산합니다.
사용 예제
예제 1: 두 번째 구분자 앞까지 반환
mysql> SELECT SUBSTRING_INDEX('My Name is Ram','a',2);
+-----------------------------------------+
| SUBSTRING_INDEX('My Name is Ram','a',2) |
+-----------------------------------------+
| My Name is R |
+-----------------------------------------+
1 row in set (0.00 sec)위 쿼리는 구분자가 'a'이고 count가 2이므로, 두 번째 'a'가 등장하기 전까지의 부분 문자열인 'My Name is R'을 반환합니다.
예제 2: 첫 번째 구분자 앞까지 반환
mysql> SELECT SUBSTRING_INDEX('My Name is Ram','a',1);
+-----------------------------------------+
| SUBSTRING_INDEX('My Name is Ram','a',1) |
+-----------------------------------------+
| My N |
+-----------------------------------------+
1 row in set (0.00 sec)이번에는 count가 1이므로, 첫 번째 'a'가 등장하기 전까지의 부분 문자열인 'My N'이 결과로 반환됩니다.
참고: 음수 count 활용하기
count에 음수를 지정하면 문자열의 오른쪽 끝에서부터 구분자를 세어 그 앞부분을 반환합니다. 예를 들어 도메인 이름에서 최상위 도메인을 제외한 부분을 추출할 수 있습니다.
mysql> SELECT SUBSTRING_INDEX('www.example.com','.',-2);
+-------------------------------------------+
| SUBSTRING_INDEX('www.example.com','.',-2) |
+-------------------------------------------+
| example.com |
+-------------------------------------------+
1 row in set (0.00 sec)이처럼 SUBSTRING_INDEX() 함수는 count 값을 조절함으로써 하나의 함수만으로 문자열의 앞부분과 뒷부분을 모두 유연하게 추출할 수 있는 강력한 문자열 처리 도구입니다.