개요
VARCHAR 타입으로 저장된 문자열 데이터에서 하이픈(-) 뒤에 붙어 있는 숫자를 제거하고 싶다면 MySQL의 SUBSTRING_INDEX() 함수를 사용하면 됩니다. 이 함수는 지정한 구분자를 기준으로 문자열을 나누고, 원하는 위치의 부분 문자열을 반환해 줍니다.
아래에서 예제 테이블을 만들고, 실제로 하이픈 뒤의 숫자를 제거하는 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable2040
-> (
-> StudentCode varchar(20)
-> );
Query OK, 0 rows affected (0.85 sec)
2. 샘플 데이터 삽입
INSERT 명령을 사용해 '이름-숫자' 형식의 레코드를 몇 개 추가합니다.
mysql> insert into DemoTable2040 values('John-232');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable2040 values('Carol-901');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable2040 values('David-987');
Query OK, 1 row affected (0.21 sec)3. 현재 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable2040;
실행 결과는 다음과 같습니다.
+-------------+
| StudentCode |
+-------------+
| John-232 |
| Carol-901 |
| David-987 |
+-------------+
3 rows in set (0.00 sec)
4. 하이픈 뒤의 숫자 제거 쿼리
이제 UPDATE 문과 SUBSTRING_INDEX() 함수를 조합하여 하이픈 뒤의 숫자를 제거합니다. 구분자 '-'를 기준으로 첫 번째(왼쪽) 부분만 남기는 방식입니다.
mysql> update DemoTable2040
-> set StudentCode=substring_index(StudentCode,'-',1);
Query OK, 3 rows affected (0.21 sec)
Rows matched: 3 Changed: 3 Warnings: 0
5. 결과 확인
업데이트 후 테이블을 다시 조회하면 다음과 같이 이름 부분만 남게 됩니다.
+-------------+
| StudentCode |
+-------------+
| John |
| Carol |
| David |
+-------------+
3 rows in set (0.00 sec)
정리
SUBSTRING_INDEX(컬럼명, '-', 1)은 하이픈을 기준으로 왼쪽 첫 번째 부분 문자열을 반환합니다. 반대로 세 번째 인자를 -1로 지정하면 오른쪽 마지막 부분, 즉 하이픈 뒤의 값만 추출할 수도 있습니다. 이처럼 SUBSTRING_INDEX()는 구분자가 포함된 문자열 데이터를 정리할 때 매우 유용하게 활용됩니다.