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() 함수를 사용할 수도 있으며, 두 방식 모두 동일한 결과를 제공합니다.