MySQL에서 문자열 컬럼에 저장된 값 중 숫자로만 이루어진 행만 조회하고 싶다면 REGEXP 연산자를 사용하면 됩니다. 정규 표현식 패턴을 활용하면 간단하게 원하는 데이터를 필터링할 수 있습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> StudentId varchar(100)
-> );
Query OK, 0 rows affected (0.51 sec)
2. 샘플 데이터 삽입하기
INSERT 문을 사용해 다양한 형태의 데이터를 입력합니다. 숫자와 문자가 섞인 값, 순수 숫자 값 등을 포함시켰습니다.
mysql> insert into DemoTable values('John74747');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('8494575Carol');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('985755645');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Carol-9032');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('101');
Query OK, 1 row affected (0.17 sec)3. 전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+--------------+
| StudentId |
+--------------+
| John74747 |
| 8494575Carol |
| 985755645 |
| Carol-9032 |
| 101 |
+--------------+
5 rows in set (0.00 sec)
4. 숫자로만 구성된 행만 조회하는 쿼리
핵심은 REGEXP '^[0-9]+$' 패턴입니다. 각 기호의 의미는 다음과 같습니다.
^: 문자열의 시작을 의미합니다.[0-9]: 0부터 9까지의 숫자 한 글자와 일치합니다.+: 앞의 패턴이 하나 이상 반복됨을 의미합니다.$: 문자열의 끝을 의미합니다.
즉, 처음부터 끝까지 오직 숫자로만 구성된 값만 매칭됩니다.
mysql> select *from DemoTable where StudentId REGEXP '^[0-9]+$';
출력 결과
+-----------+
| StudentId |
+-----------+
| 985755645 |
| 101 |
+-----------+
2 rows in set (0.17 sec)
결과를 보면 'John74747', '8494575Carol', 'Carol-9032'처럼 문자가 포함된 행은 제외되고, '985755645'와 '101'처럼 순수하게 숫자로만 이루어진 두 개의 행만 반환된 것을 확인할 수 있습니다.
참고: NOT REGEXP로 반대 경우 조회하기
반대로 숫자가 아닌 행(문자가 하나라도 포함된 행)만 조회하려면 NOT REGEXP를 사용하면 됩니다.
mysql> select *from DemoTable where StudentId NOT REGEXP '^[0-9]+$';
이처럼 MySQL의 REGEXP 연산자는 복잡한 조건의 문자열 필터링을 손쉽게 처리할 수 있는 강력한 도구입니다. 데이터 검증이나 클렌징 작업 시 유용하게 활용해 보세요.