특정 열에서 숫자만 포함된 값을 제거하려면 MySQL의 REGEXP(정규 표현식) 연산자를 사용하면 됩니다. 흔히 SQL에서 LIKE '%[^0-9]%' 패턴을 시도하는 경우가 많은데, 이 패턴은 MySQL에서 정상적으로 작동하지 않습니다. 따라서 정규 표현식 기반의 조건문을 활용해야 합니다.
1. 샘플 테이블 생성
먼저 실습용 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> ClientCode varchar(100)
-> );
Query OK, 0 rows affected (0.56 sec)
2. 테스트 데이터 삽입
INSERT 명령어를 사용해 다양한 형태의 데이터를 입력합니다. 여기에는 문자와 숫자가 섞인 값, 언더스코어가 포함된 값, 그리고 숫자로만 구성된 값이 있습니다.
mysql> insert into DemoTable values('Chris902');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('Robert_');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('903');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('123_David');
Query OK, 1 row affected (0.21 sec)3. 전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+------------+
| ClientCode |
+------------+
| Chris902 |
| Robert_ |
| 903 |
| 123_David |
+------------+
4 rows in set (0.00 sec)
4. 숫자만 있는 값 제거하기
앞서 언급했듯이 LIKE "%[^0-9]%" 같은 SQL Server 스타일의 패턴 매칭은 MySQL에서 작동하지 않습니다. 대신 아래와 같이 REGEXP를 사용하면 원하는 결과를 얻을 수 있습니다.
mysql> select *from DemoTable where ClientCode REGEXP '.*[^0-9].*';
출력 결과
+------------+
| ClientCode |
+------------+
| Chris902 |
| Robert_ |
| 123_David |
+------------+
3 rows in set (0.04 sec)
쿼리 동작 원리
정규 표현식 '.*[^0-9].*'의 의미를 살펴보면 다음과 같습니다.
.*: 임의의 문자가 0번 이상 반복될 수 있음을 의미합니다.[^0-9]: 숫자(0~9)를 제외한 문자가 하나 이상 존재해야 함을 의미합니다.
즉, 이 조건은 숫자가 아닌 문자를 최소 하나라도 포함하는 행만 반환합니다. 그 결과 숫자로만 구성된 값('903')은 자동으로 걸러지고, 문자가 포함된 나머지 세 개의 행만 조회되는 것입니다.