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

특수 문자가 포함된 열 값만 조회하는 MySQL REGEXP 쿼리 방법

MySQL에서 열 값 중 특수 문자가 포함된 데이터만 골라내야 할 때는 REGEXP 연산자를 활용하면 됩니다. REGEXP는 정규 표현식 기반으로 조건을 지정할 수 있어서, 알파벳과 숫자를 제외한 나머지 문자가 들어 있는 행을 손쉽게 필터링할 수 있습니다. 이번 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1. 예제 테이블 생성하기

먼저 실습에 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable(SubjectCode varchar(100));
Query OK, 0 rows affected (0.89 sec)

2. 샘플 데이터 입력하기

INSERT 문을 이용해 텍스트, 숫자, 특수 문자가 섞여 있는 레코드를 여러 개 입력합니다.

mysql> insert into DemoTable values('Java899@22');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('C#');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('~Python232');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('MongoDB%');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('C123456');
Query OK, 1 row affected (0.37 sec)

3. 전체 데이터 확인하기

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

mysql> select *from DemoTable;

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

+-------------+
| SubjectCode |
+-------------+
| Java899@22  |
| C#          |
| ~Python232  |
| MongoDB%    |
| C123456     |
+-------------+
5 rows in set (0.00 sec)

4. 특수 문자가 포함된 값만 조회하기

특수 문자가 포함된 값을 가져오는 핵심 쿼리는 다음과 같습니다.

mysql> select *from DemoTable where SubjectCode regexp '[^a-zA-Z0-9\&]';

여기서 정규 표현식 [^a-zA-Z0-9\&]의 의미를 살펴보면, 대괄호 안의 ^는 부정(NOT)을 뜻합니다. 즉, 영문 대소문자(a-z, A-Z), 숫자(0-9), 그리고 & 기호를 제외한 어떤 문자라도 포함되어 있으면 매칭하겠다는 뜻입니다.

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+-------------+
| SubjectCode |
+-------------+
| Java899@22  |
| C#          |
| ~Python232  |
| MongoDB%    |
+-------------+
4 rows in set (0.00 sec)

결과 분석

결과를 보면 '@', '#', '~', '%' 같은 특수 문자가 포함된 4개의 행만 반환되었고, 오직 숫자로만 구성된 'C123456'은 결과에서 제외된 것을 확인할 수 있습니다. 이처럼 REGEXP의 부정 문자 클래스를 활용하면 원하는 패턴의 데이터만 정확하게 추출할 수 있습니다.

참고 사항

검색 대상에서 특정 특수 문자(예: '&')를 허용하고 싶다면 위 예제처럼 문자 클래스 안에 해당 문자를 명시하면 되고, 반대로 더 엄격한 필터링이 필요하다면 패턴을 상황에 맞게 수정하면 됩니다. 또한 MySQL 8.0부터는 ICU 라이브러리 기반의 정규 표현식이 적용되어 유니코드 처리도 더욱 안정적으로 지원됩니다.