MySQL에서 '이름/숫자' 형태로 저장된 문자열 데이터가 있을 때, 구분자 뒤에 붙은 숫자를 제거하고 이름만 남기고 싶은 경우가 종종 있습니다. 예를 들어 John/56989라는 값을 John으로 바꾸는 것이죠. 이럴 때 SUBSTRING_INDEX() 함수를 사용하면 간단하게 해결할 수 있습니다.
SUBSTRING_INDEX() 함수란?
SUBSTRING_INDEX() 함수는 지정한 구분자를 기준으로 문자열을 나눈 후, 원하는 위치 이전(또는 이후)의 부분 문자열을 반환하는 함수입니다. 세 번째 인자에 1을 넣으면 첫 번째 구분자 앞까지의 문자열을 가져옵니다.
예제 테이블 생성하기
먼저 실습용 테이블을 만들어 보겠습니다.
mysql> create table DemoTable
(
StudentName varchar(100)
);
Query OK, 0 rows affected (1.05 sec)샘플 데이터 삽입하기
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다. 구분자(/)가 포함된 값과 포함되지 않은 값을 함께 넣어 다양한 경우를 테스트해 보겠습니다.
mysql> insert into DemoTable values('John/56989');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Carol');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('David/74674');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('Bob/45565');
Query OK, 1 row affected (0.09 sec)현재 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 봅니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------------+ | StudentName | +-------------+ | John/56989 | | Carol | | David/74674 | | Bob/45565 | +-------------+ 4 rows in set (0.00 sec)
UPDATE 쿼리로 구분자 뒤의 숫자 제거하기
이제 핵심인 UPDATE 쿼리입니다. SUBSTRING_INDEX() 함수를 사용해 StudentName 컬럼의 값을 '/' 구분자 기준 첫 번째 부분 문자열로 업데이트합니다.
mysql> update DemoTable set StudentName=substring_index(StudentName,'/',1); Query OK, 3 rows affected (0.13 sec) Rows matched :4 Changed :3 Warnings :0
쿼리 결과를 보면 4개 행이 매칭되었고, 그중 3개 행이 변경되었습니다. 'Carol'처럼 구분자가 없는 값은 변경 대상에서 제외된 것입니다.
업데이트 결과 확인하기
다시 한번 테이블을 조회해 변경된 결과를 확인해 보겠습니다.
mysql> select *from DemoTable;
모든 값에서 구분자와 숫자가 제거되고 이름만 깔끔하게 남은 것을 확인할 수 있습니다.
+-------------+ | StudentName | +-------------+ | John | | Carol | | David | | Bob | +-------------+ 4 rows in set (0.00 sec)
정리
SUBSTRING_INDEX(컬럼명, '구분자', 1) 패턴을 UPDATE 문과 함께 사용하면, 구분자 뒤에 붙은 불필요한 숫자나 문자열을 손쉽게 제거할 수 있습니다. 구분자가 없는 값은 원본 그대로 유지되므로 별도의 조건 처리 없이도 안전하게 사용할 수 있다는 점이 큰 장점입니다.