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

MySQL에서 쉼표로 구분된 값 사이의 특정 문자열을 검색하는 방법 (REGEXP 활용)

MySQL에서 쉼표로 구분된 값 내에서 특정 문자열 찾기

쉼표(,)로 구분된 여러 값이 하나의 컬럼에 저장되어 있을 때, 그중 특정 문자열과 정확히 일치하는 행만 조회하고 싶다면 REGEXP 연산자를 사용하면 됩니다. 단순 LIKE 검색은 부분 일치까지 포함해버릴 수 있기 때문에, 정규 표현식으로 경계를 명확히 지정하는 것이 안전합니다.

예제를 통해 살펴보겠습니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 만듭니다.

mysql> create table DemoTable1902
    (
    Subjects text
    );
Query OK, 0 rows affected (0.00 sec)

2. 데이터 삽입

INSERT 명령으로 쉼표로 구분된 값을 가진 레코드를 몇 개 추가합니다.

mysql> insert into DemoTable1902 values('MongoDB,Java,Python');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1902 values('SQL Server,MySQL,PL/SQL');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1902 values('Hibernate,Spring,JPA');
Query OK, 1 row affected (0.00 sec)

3. 저장된 데이터 확인

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

mysql> select * from DemoTable1902;

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

+-------------------------+
| Subjects                |
+-------------------------+
| MongoDB,Java,Python     |
| SQL Server,MySQL,PL/SQL |
| Hibernate,Spring,JPA    |
+-------------------------+
3 rows in set (0.00 sec)

4. REGEXP로 특정 문자열 검색하기

이제 'MySQL'이라는 항목이 쉼표로 구분된 값 중 하나로 정확히 포함되어 있는 행을 검색하는 쿼리입니다.

mysql> select * from DemoTable1902
    where Subjects regexp '(^|.*,)MySQL(,.*|$)';

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

+-------------------------+
| Subjects                |
+-------------------------+
| SQL Server,MySQL,PL/SQL |
+-------------------------+
1 row in set (0.00 sec)

정규 표현식 패턴 해석

위 쿼리에서 사용한 패턴 '(^|.*,)MySQL(,.*|$)'의 의미는 다음과 같습니다.

  • (^|.*,) : 검색 대상 문자열 앞부분이 문자열의 시작(^)이거나, 쉼표로 끝나는 임의의 문자열이어야 합니다. 즉, 'MySQL'이 첫 번째 항목이거나 다른 항목 뒤에 오는 경우를 모두 처리합니다.
  • (,.*|$) : 'MySQL' 뒤에는 쉼표와 이어지는 문자열이 있거나, 문자열의 끝($)이어야 합니다.

이렇게 하면 'MySQL'이 다른 단어의 일부(예: 'MySQL8' 등)로 잘못 매칭되는 것을 방지하고, 쉼표로 구분된 개별 항목 기준으로 정확하게 검색할 수 있습니다.