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

MySQL REGEXP로 파이프(|) 구분 열에서 일치하는 행 찾는 방법

파이프(|) 기호로 구분된 여러 값이 하나의 열에 저장되어 있을 때, 특정 값과 일치하는 행을 찾아야 하는 경우가 있습니다. 이럴 때 MySQL의 REGEXP(정규 표현식) 연산자를 활용하면 간단하게 해결할 수 있습니다. 아래 예제와 함께 단계별로 살펴보겠습니다.

1. 테이블 생성하기

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

mysql> create table DemoTable
-> (
-> Value varchar(60)
-> );
Query OK, 0 rows affected (0.48 sec)

2. 샘플 데이터 삽입하기

INSERT 명령으로 파이프로 구분된 값을 포함한 레코드를 여러 개 삽입합니다.

mysql> insert into DemoTable values('8|56|78|45');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable values('9876');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('98|8');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('3|8|9');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('97|94');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('103|104|110|8|97');
Query OK, 1 row affected (0.10 sec)

3. 저장된 데이터 확인하기

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

mysql> select *from DemoTable;

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

+------------------+
| Value |
+------------------+
| 8|56|78|45 |
| 9876 |
| 98|8 |
| 3|8|9 |
| 97|94 |
| 103|104|110|8|97 |
+------------------+
6 rows in set (0.00 sec)

4. REGEXP로 일치하는 행 찾기

파이프로 구분된 열에서 '|8|' 패턴과 일치하는 행을 찾는 쿼리입니다.

mysql> select *from DemoTable
-> where Value regexp '\|8\|';

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

+------------------+
| Value |
+------------------+
| 3|8|9 |
| 103|104|110|8|97 |
+------------------+
2 rows in set (0.00 sec)

쿼리 동작 원리

정규 표현식에서 파이프(|)는 OR 연산자로 해석되는 특수 문자입니다. 따라서 문자 그대로의 파이프 기호를 검색하려면 역슬래시(\)로 이스케이프 처리해야 합니다. 위 쿼리의 '\\|8\\|' 패턴은 "앞뒤가 파이프로 둘러싸인 독립적인 값 8"을 의미합니다.

그 결과 '3|8|9'와 '103|104|110|8|97' 두 행만 조건에 해당합니다. 반면 '9876'처럼 8이 다른 숫자와 붙어 있거나, '98|8'처럼 8이 파이프 바로 앞에 위치하지 않은 행은 정확히 일치하지 않으므로 결과에서 제외됩니다.