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:] 문자 클래스를 사용하면 가독성이 좋아지고 유니코드 환경에서 더 안정적으로 동작할 수 있다는 장점이 있습니다. 상황에 맞게 적절한 정규 표현식을 선택하여 사용하시기 바랍니다.