MySQL에서 문자열에 포함된 숫자는 모두 제거하고 알파벳 문자와 슬래시('/')만 남기고 싶을 때가 있습니다. 이럴 때 REGEXP_REPLACE() 함수를 사용하면 정규 표현식 기반으로 손쉽게 처리할 수 있습니다.
1. 예제 테이블 생성하기
먼저 실습에 사용할 테이블을 만들어 보겠습니다.
mysql> create table DemoTable1595
-> (
-> StudentCode varchar(50)
-> );
Query OK, 0 rows affected (0.44 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 숫자와 문자, 슬래시가 섞여 있는 레코드를 몇 개 추가합니다.
mysql> insert into DemoTable1595 values('200 John');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable1595 values('101 Carol/400 Taylor');
Query OK, 1 row affected (0.72 sec)
mysql> insert into DemoTable1595 values('101 302 405 Sam/9870');
Query OK, 1 row affected (0.28 sec)3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1595;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----------------------+
| StudentCode |
+----------------------+
| 200 John |
| 101 Carol/400 Taylor |
| 101 302 405 Sam/9870 |
+----------------------+
3 rows in set (0.00 sec)
4. REGEXP_REPLACE로 숫자만 제거하기
이제 핵심인 쿼리입니다. REGEXP_REPLACE() 함수에 정규 표현식 패턴을 적용하면 숫자(정수 및 소수)와 그 앞뒤 공백을 모두 제거하고 문자열과 '/'만 남길 수 있습니다.
mysql> select regexp_replace(StudentCode,' *[0-9]+([.][0-9]+)?(/[0-9]+([.][0-9]+)?)? *', '') as `GetOnlyStringand/` from DemoTable1595;
정규 표현식 패턴 해석
*[0-9]+: 앞쪽 공백과 하나 이상의 연속된 숫자를 의미합니다.([.][0-9]+)?: 마침표(.) 또는 쉼표(,)로 구분된 소수 부분이 있으면 함께 매칭합니다.(/[0-9]+...)?: 슬래시 뒤에 붙은 숫자도 함께 제거 대상으로 처리합니다.*: 마지막으로 뒤따르는 공백까지 제거합니다.
실행 결과는 다음과 같습니다.
+-------------------+
| GetOnlyStringand/ |
+-------------------+
| John |
| Carol/Taylor |
| Sam/ |
+-------------------+
3 rows in set (0.00 sec)
마무리
이처럼 MySQL의 REGEXP_REPLACE() 함수를 활용하면 별도의 애플리케이션 로직 없이 SQL 쿼리만으로 문자열에서 숫자를 깔끔하게 제거할 수 있습니다. 데이터 정제나 코드 값 파싱 작업에서 유용하게 활용해 보시기 바랍니다.