MySQL에서 데이터를 다루다 보면 아포스트로피(')와 같은 특수 문자가 포함된 문자열을 검색해야 하는 경우가 있습니다. 이럴 때는 REPLACE() 함수와 LIKE 연산자를 조합하면 간단하게 해결할 수 있습니다. 예제를 통해 단계별로 살펴보겠습니다.
1. 테이블 생성
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable ( Title text ); Query OK, 0 rows affected (0.66 sec)
2. 샘플 데이터 삽입
insert 명령을 사용하여 특수 문자(아포스트로피)가 포함된 레코드들을 삽입합니다.
mysql> insert into DemoTable values('MySQL');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('MongoDB\'s');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('MySQL\'s');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Java\'s');
Query OK, 1 row affected (0.24 sec)3. 전체 데이터 확인
select 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-----------+ | Title | +-----------+ | MySQL | | MongoDB's | | MySQL's | | Java's | +-----------+ 4 rows in set (0.00 sec)
4. 특수 문자가 포함된 문자열 검색하기
핵심은 REPLACE() 함수입니다. REPLACE(Title, '''', '')는 Title 컬럼 값에서 모든 작은따옴표(')를 제거한 문자열을 반환합니다. 이 결과를 LIKE 연산자로 비교하면, 원본 데이터에 특수 문자가 포함되어 있어도 원하는 문자열을 정확히 찾을 수 있습니다.
mysql> select *from DemoTable where replace(Title, '''', '') like '%MySQLs%';
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+---------+ | Title | +---------+ | MySQL's | +---------+ 1 row in set (0.00 sec)
이처럼 REPLACE() 함수로 검색 대상 컬럼에서 특수 문자를 임시로 제거한 뒤 비교하면, 'MySQL's'처럼 아포스트로피가 포함된 레코드도 손쉽게 조회할 수 있습니다. 이 기법은 따옴표 외에도 하이픈(-), 콤마(,) 등 다양한 특수 문자 처리에 응용할 수 있습니다.