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

MySQL REGEXP로 쉼표 구분 값에서 특정 값이 포함된 레코드 조회하기

MySQL에서는 REGEXP(정규 표현식)를 사용하여 쉼표로 구분된 값(CSV 형태)이 저장된 컬럼에서 원하는 값을 손쉽게 검색할 수 있습니다.

예를 들어, 쉼표로 구분된 여러 값 중 하나라도 90이 포함된 행만 조회하고 싶다면 정규 표현식을 활용하면 됩니다.

1. 테이블 생성

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

mysql> create table DemoTable1447
    -> (
    -> Value varchar(100)
    -> );
Query OK, 0 rows affected (0.58 sec)

2. 샘플 데이터 삽입

INSERT 명령을 사용해 몇 개의 레코드를 입력합니다.

mysql> insert into DemoTable1447 values('19,58,90,56');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1447 values('56,89,99,100');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1447 values('75,76,65,90');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1447 values('101,54,57,59');
Query OK, 1 row affected (0.14 sec)

3. 전체 데이터 확인

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

mysql> select * from DemoTable1447;

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

+--------------+
| Value        |
+--------------+
| 19,58,90,56  |
| 56,89,99,100 |
| 75,76,65,90  |
| 101,54,57,59 |
+--------------+
4 rows in set (0.00 sec)

4. REGEXP로 특정 값 조회하기

아래는 쉼표로 구분된 값에서 특정 값(여기서는 90)이 포함된 레코드만 가져오는 쿼리입니다.

mysql> select * from DemoTable1447 where Value regexp '(^|,)90($|,)';

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

+-------------+
| Value       |
+-------------+
| 19,58,90,56 |
| 75,76,65,90 |
+-------------+
2 rows in set (0.00 sec)

정규 표현식 해설

'(^|,)90($|,)' 패턴은 다음과 같은 의미를 가집니다.

(^|,) : 문자열의 시작(^) 또는 쉼표(,) 뒤에 위치
90 : 찾고자 하는 값
($|,) : 문자열의 끝($) 또는 쉼표(,) 앞에 위치

이 패턴 덕분에 '190'이나 '900'처럼 90이 다른 숫자의 일부로 포함된 경우는 제외되고, 독립적인 값으로 90이 존재하는 행만 정확하게 조회됩니다.