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

MySQL REGEXP 정규식으로 특정 길이의 문자열 조회하기

MySQL에서는 REGEXP 연산자를 활용하면 정규식 패턴에 일치하는 문자열만 손쉽게 조회할 수 있습니다. 이번 글에서는 테이블을 만들고 데이터를 삽입한 뒤, 정규식을 사용해 특정 조건(예: 숫자가 11개 연속으로 포함된 값)에 맞는 문자열만 반환하는 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable649 (Value text);
Query OK, 0 rows affected (0.68 sec)

2. 샘플 데이터 삽입

INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable649 values('1903');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable649 values('9321010');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable649 values('983032023393');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable649 values('1234567892');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable649 values('989898989');
Query OK, 1 row affected (0.20 sec)

3. 전체 레코드 확인

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable649;

실행 결과는 다음과 같습니다.

+--------------+
| Value        |
+--------------+
| 1903         |
| 9321010      |
| 983032023393 |
| 1234567892   |
| 989898989    |
+--------------+
5 rows in set (0.00 sec)

4. REGEXP로 특정 문자열 조회

이제 정규식을 사용해 원하는 문자열만 반환하는 쿼리를 실행합니다. 아래 예제는 [0-9]{11} 패턴을 적용하여 숫자가 11자리 이상 연속으로 포함된 값만 필터링합니다.

mysql> select *from DemoTable649 where Value REGEXP '[0-9]{11}';

실행 결과는 다음과 같습니다.

+--------------+
| Value        |
+--------------+
| 983032023393 |
+--------------+
1 row in set (0.00 sec)

정규식 패턴 설명

  • [0-9]: 0부터 9까지의 숫자 한 자리와 일치합니다.
  • {11}: 앞의 패턴이 정확히 11번 반복되는 경우를 의미합니다.

따라서 위 쿼리는 5개의 레코드 중 '983032023393'처럼 11자리 이상의 연속된 숫자를 포함한 값 하나만 결과로 반환하게 됩니다. 참고로 MySQL 8.0부터는 REGEXP 연산자 대신 REGEXP_LIKE() 함수를 사용할 수도 있으며, 두 방식 모두 동일한 결과를 제공합니다.