Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL REGEXP로 순수 숫자 레코드는 제외하고 문자가 포함된 레코드만 조회하는 방법

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]' 패턴은 대소문자를 구분하지 않고 영문자가 하나라도 포함된 모든 레코드를 반환하기 때문에, 숫자 데이터만 걸러내고 싶은 상황에서 매우 유용하게 활용할 수 있습니다.