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

MySQL REGEXP로 특수 문자가 포함된 문자열 검색하는 방법

MySQL에서 특수 문자가 포함된 문자열 찾기

데이터베이스 작업을 하다 보면 컬럼 값에 특수 문자(예: _, #, $ 등)가 포함되어 있는지 확인해야 하는 경우가 자주 발생합니다. MySQL에서는 REGEXP(정규 표현식) 연산자를 사용하면 간단하게 이러한 문자열을 검색할 수 있습니다.

특수 문자가 포함된 문자열을 검색하는 기본 문법은 다음과 같습니다.

select * from yourTableName
where yourColumnName REGEXP '[^a-zA-Z0-9]';

여기서 [^a-zA-Z0-9]는 영문 대소문자와 숫자를 제외한 모든 문자, 즉 특수 문자를 의미합니다.

1. 예제 테이블 생성

먼저 실습용 테이블을 생성해 보겠습니다.

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

2. 데이터 삽입

INSERT 명령을 사용하여 테이블에 레코드를 삽입합니다.

mysql> insert into specialCharactersDemo values('STU_1234');
Query OK, 1 row affected (0.15 sec)
mysql> insert into specialCharactersDemo values('STU567');
Query OK, 1 row affected (0.14 sec)
mysql> insert into specialCharactersDemo values('STU#1234');
Query OK, 1 row affected (0.13 sec)
mysql> insert into specialCharactersDemo values('STU897$');
Query OK, 1 row affected (0.18 sec)
mysql> insert into specialCharactersDemo values('STU999');
Query OK, 1 row affected (0.43 sec)
mysql> insert into specialCharactersDemo values('STU1010');
Query OK, 1 row affected (0.14 sec)

3. 전체 데이터 조회

SELECT 문을 사용하여 테이블의 모든 레코드를 확인해 보겠습니다.

mysql> select *from specialCharactersDemo;

위 쿼리는 다음과 같은 결과를 출력합니다.

+-----------+
| StudentId |
+-----------+
| STU_1234  |
| STU567    |
| STU#1234  |
| STU897$   |
| STU999    |
| STU1010   |
+-----------+
6 rows in set (0.00 sec)

4. REGEXP로 특수 문자 검색하기

이제 특수 문자가 포함된 문자열만 검색하는 쿼리를 실행해 보겠습니다.

mysql> select *from specialCharactersDemo
   -> where StudentId REGEXP '[^a-zA-Z0-9]';

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

+-----------+
| StudentId |
+-----------+
| STU_1234  |
| STU#1234  |
| STU897$   |
+-----------+
3 rows in set (0.02 sec)

결과를 보면 언더스코어(_), 해시(#), 달러($)와 같은 특수 문자가 포함된 세 개의 레코드만 정확히 조회된 것을 확인할 수 있습니다.

5. POSIX 문자 클래스 활용

동일한 결과를 얻는 또 다른 방법으로, POSIX 문자 클래스인 [:alnum:]을 사용할 수도 있습니다. [:alnum:]은 영숫자(alphanumeric) 문자를 의미하며, 앞에 ^를 붙이면 영숫자가 아닌 문자, 즉 특수 문자를 찾게 됩니다.

mysql> select *from specialCharactersDemo
   -> where StudentId REGEXP'[^[:alnum:]]';

실행 결과는 앞선 쿼리와 동일합니다.

+-----------+
| StudentId |
+-----------+
| STU_1234  |
| STU#1234  |
| STU897$   |
+-----------+
3 rows in set (0.05 sec)

정리

MySQL에서 특수 문자가 포함된 문자열을 검색하는 방법은 크게 두 가지입니다.

  • [^a-zA-Z0-9]: 영문 대소문자와 숫자를 제외한 모든 문자를 매칭
  • [^[:alnum:]]: POSIX 문자 클래스를 사용하여 영숫자가 아닌 문자를 매칭

두 방식 모두 동일한 결과를 반환하지만, [:alnum:] 문자 클래스를 사용하면 가독성이 좋아지고 유니코드 환경에서 더 안정적으로 동작할 수 있다는 장점이 있습니다. 상황에 맞게 적절한 정규 표현식을 선택하여 사용하시기 바랍니다.