MySQL SUBSTRING_INDEX() 함수로 슬래시 구분 문자열 다루기
슬래시(/)로 구분된 값이 저장된 문자열에서 원하는 부분만 추출해야 하는 경우가 종종 있습니다. 예를 들어 101/John/Smith처럼 학번과 이름이 함께 저장된 데이터에서 성과 이름만 가져오고 싶다면, MySQL의 SUBSTRING_INDEX() 함수를 사용하면 간단하게 해결할 수 있습니다.
SUBSTRING_INDEX()는 지정한 구분자를 기준으로 문자열을 나누어 필요한 부분만 반환하는 함수입니다. 세 번째 인자에 양수를 넣으면 왼쪽(앞)부터, 음수를 넣으면 오른쪽(뒤)부터 계산합니다.
1. 테이블 생성하기
먼저 실습용 테이블을 만들어 보겠습니다.
mysql> create table DemoTable1416
-> (
-> StudentCode varchar(100)
-> );
Query OK, 0 rows affected (1.56 sec)
2. 샘플 데이터 삽입하기
INSERT 문을 사용하여 슬래시로 구분된 학생 코드 데이터를 입력합니다.
mysql> insert into DemoTable1416 values('101/John/Smith');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1416 values('901/Carol/Taylor');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1416 values('400/David/Miller');
Query OK, 1 row affected (0.12 sec)3. 전체 데이터 조회하기
SELECT 문으로 테이블에 저장된 모든 레코드를 확인해 보겠습니다.
mysql> select * from DemoTable1416;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+------------------+
| StudentCode |
+------------------+
| 101/John/Smith |
| 901/Carol/Taylor |
| 400/David/Miller |
+------------------+
3 rows in set (0.00 sec)
4. SUBSTRING_INDEX()로 부분 문자열 추출하기
이제 슬래시로 구분된 문자열에서 이름 부분만 추출하는 쿼리를 살펴보겠습니다. 아래 쿼리에서 세 번째 인자로 -2를 사용했는데, 이는 오른쪽부터 두 번째 구분자까지의 문자열을 반환한다는 의미입니다.
mysql> select substring_index(StudentCode,'/',-2) from DemoTable1416;
실행 결과는 다음과 같습니다.
+-------------------------------------+
| substring_index(StudentCode,'/',-2) |
+-------------------------------------+
| John/Smith |
| Carol/Taylor |
| David/Miller |
+-------------------------------------+
3 rows in set (0.00 sec)
추가 팁: 마지막 단어만 추출하기
성(Smith, Taylor, Miller)만 따로 추출하고 싶다면 인자 값을 -1로 변경하면 됩니다.
mysql> select substring_index(StudentCode,'/',-1) from DemoTable1416;
반대로 맨 앞의 학번(101, 901, 400)만 가져오려면 substring_index(StudentCode, '/', 1)처럼 양수를 사용하면 됩니다.
정리
SUBSTRING_INDEX() 함수는 구분자로 나뉜 문자열에서 특정 위치의 값을 손쉽게 추출할 수 있는 강력한 도구입니다. 양수와 음수 인자의 동작 방식만 이해하면 복잡한 문자열 파싱도 간단한 쿼리 한 줄로 처리할 수 있습니다.