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

MySQL에서 REGEXP로 숫자로만 구성된 행만 조회하는 방법

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 연산자는 복잡한 조건의 문자열 필터링을 손쉽게 처리할 수 있는 강력한 도구입니다. 데이터 검증이나 클렌징 작업 시 유용하게 활용해 보세요.