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

MySQL REGEXP 정규 표현식으로 여러 일치 문자열을 가진 레코드 선택하기

MySQL REGEXP 정규 표현식으로 여러 일치 문자열을 가진 레코드 선택하기

MySQL에서 특정 패턴과 일치하는 여러 문자열을 가진 레코드를 조회하려면 정규 표현식(REGEXP)을 활용하면 됩니다. 이번 글에서는 예제를 통해 그 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 데모용 테이블을 생성합니다.

mysql> create table DemoTable
    (
    ProductId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ProductName varchar(20)
    );
Query OK, 0 rows affected (0.19 sec)

2. 데이터 삽입

INSERT 명령을 사용해 몇 개의 레코드를 삽입합니다. 하이픈(-)이 포함된 제품명과 포함되지 않은 제품명을 섞어서 입력합니다.

mysql> insert into DemoTable(ProductName) values('Product-1');
Query OK, 1 row affected (0.05 sec)

mysql> insert into DemoTable(ProductName) values('Product2');
Query OK, 1 row affected (0.06 sec)

mysql> insert into DemoTable(ProductName) values('Product1');
Query OK, 1 row affected (0.04 sec)

mysql> insert into DemoTable(ProductName) values('Product-3');
Query OK, 1 row affected (0.05 sec)

mysql> insert into DemoTable(ProductName) values('Product3');
Query OK, 1 row affected (0.05 sec)

mysql> insert into DemoTable(ProductName) values('Product-4');
Query OK, 1 row affected (0.09 sec)

mysql> insert into DemoTable(ProductName) values('Product4');
Query OK, 1 row affected (0.05 sec)

3. 전체 레코드 확인

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable;

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

+-----------+-------------+
| ProductId | ProductName |
+-----------+-------------+
| 1 | Product-1 |
| 2 | Product2 |
| 3 | Product1 |
| 4 | Product-3 |
| 5 | Product3 |
| 6 | Product-4 |
| 7 | Product4 |
+-----------+-------------+
7 rows in set (0.00 sec)

4. 정규 표현식으로 조건에 맞는 레코드 조회

다음은 REGEXP 연산자를 사용해 'Product' 바로 뒤에 숫자 1~4 중 하나가 오고, 그 뒤에는 어떤 문자가 와도 상관없는 패턴과 일치하는 레코드를 조회하는 쿼리입니다.

mysql> select *from DemoTable
where ProductName regexp 'Product[1234].*';

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

+-----------+-------------+
| ProductId | ProductName |
+-----------+-------------+
| 2 | Product2 |
| 3 | Product1 |
| 5 | Product3 |
| 7 | Product4 |
+-----------+-------------+
4 rows in set (0.00 sec)

결과 분석

위 결과를 보면 하이픈(-)이 없는 'Product1', 'Product2', 'Product3', 'Product4'만 조회된 것을 확인할 수 있습니다. 정규 표현식 'Product[1234].*'에서 대괄호 [1234]는 해당 위치에 올 수 있는 문자 집합을 의미하고, .*는 임의의 문자가 0번 이상 반복될 수 있음을 나타냅니다. 따라서 'Product-1'처럼 'Product' 뒤에 하이픈이 오는 값은 패턴에 맞지 않아 제외됩니다. 이처럼 REGEXP를 활용하면 LIKE 절로는 처리하기 어려운 복잡한 패턴 매칭 조건도 간단하게 구현할 수 있습니다.