MySQL REGEXP를 활용한 문자 포함 레코드 필터링
MySQL에서 테이블에 저장된 데이터 중 순수하게 숫자로만 이루어진 레코드는 제외하고, 알파벳 문자가 포함되어 있거나 문자와 숫자가 혼합된 레코드만 조회하고 싶을 때가 있습니다. 이런 경우 REGEXP(정규 표현식) 연산자를 사용하면 간단하게 해결할 수 있습니다.
기본 문법
REGEXP 패턴에 알파벳 범위인 [a-zA-Z]를 지정하면, 해당 열의 값 중 영문자가 하나라도 포함된 레코드만 반환됩니다.
SELECT yourColumnName FROM yourTableName WHERE yourColumnName REGEXP '[a-zA-Z]';
예제 테이블 생성
먼저 실습용 테이블을 생성해 보겠습니다.
mysql> CREATE TABLE demo41
-> (
-> name VARCHAR(40)
-> );
Query OK, 0 rows affected (0.64 sec)
샘플 데이터 삽입
INSERT 명령을 사용하여 다양한 형태의 데이터를 입력합니다. 문자만 있는 값, 문자와 숫자가 섞인 값, 그리고 순수 숫자 값을 모두 포함시켰습니다.
mysql> INSERT INTO demo41 VALUES('John Smith34');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO demo41 VALUES('John Smith');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO demo41 VALUES('9234John Smith');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO demo41 VALUES('john smith');
Query OK, 1 row affected (0.23 sec)
mysql> INSERT INTO demo41 VALUES('98775');
Query OK, 1 row affected (0.15 sec)저장된 전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> SELECT *FROM demo41;
실행 결과는 다음과 같습니다.
+----------------+
| name |
+----------------+
| John Smith34 |
| John Smith |
| 9234John Smith |
| john smith |
| 98775 |
+----------------+
5 rows in set (0.00 sec)
현재 총 5개의 레코드가 저장되어 있으며, 마지막 '98775'만 순수 숫자 값입니다.
REGEXP 쿼리 실행
이제 REGEXP 조건을 적용하여 알파벳이 포함된 레코드만 조회해 보겠습니다.
mysql> SELECT name FROM demo41 WHERE name REGEXP '[a-zA-Z]';
실행 결과는 다음과 같습니다.
+----------------+
| name |
+----------------+
| John Smith34 |
| John Smith |
| 9234John Smith |
| john smith |
+----------------+
4 rows in set (0.00 sec)
결과 분석
실행 결과를 보면 'John Smith34'처럼 문자 뒤에 숫자가 붙은 값이나 '9234John Smith'처럼 숫자 앞에 문자가 붙은 값까지 모두 정상적으로 조회된 것을 확인할 수 있습니다. 반면 순수 숫자로만 구성된 '98775'는 결과에서 제외되었습니다.
이처럼 REGEXP '[a-zA-Z]' 패턴은 대소문자를 구분하지 않고 영문자가 하나라도 포함된 모든 레코드를 반환하기 때문에, 숫자 데이터만 걸러내고 싶은 상황에서 매우 유용하게 활용할 수 있습니다.