MySQL에서 '%' 문자 이스케이프하기
MySQL의 LIKE 연산자에서 %는 임의의 문자열과 일치하는 와일드카드로 해석됩니다. 따라서 컬럼 값에 실제 '%' 문자가 포함되어 있고 이를 그대로 검색하려면, 백슬래시(\%)로 이스케이프 처리해야 합니다. 이 글에서는 예제 테이블을 만들고 문자열의 왼쪽(시작), 중간, 끝에 있는 '%' 문자를 이스케이프하여 조회하는 방법을 단계별로 살펴봅니다.
1. 예제 테이블 생성
먼저 테이블을 생성합니다.
mysql> create table DemoTable629 (StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,StudentSubject text); Query OK, 0 rows affected (0.77 sec)
2. 샘플 데이터 삽입
insert 명령으로 '%' 문자가 다양한 위치에 포함된 레코드를 삽입합니다.
mysql> insert into DemoTable629(StudentSubject) values('MySQL%');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable629(StudentSubject) values('Spring%Hibernate');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable629(StudentSubject) values('%Java');
Query OK, 1 row affected (0.21 sec)3. 전체 데이터 확인
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable629;
실행 결과는 다음과 같습니다.
+-----------+------------------+ | StudentId | StudentSubject | +-----------+------------------+ | 1 | MySQL% | | 2 | Spring%Hibernate | | 3 | %Java | +-----------+------------------+ 3 rows in set (0.00 sec)
4. '%' 문자 이스케이프 쿼리
문자열 끝에 있는 '%'를 찾으려면 LIKE 패턴에서 \%와 같이 백슬래시로 이스케이프합니다.
mysql> select *from DemoTable629 where StudentSubject like '%\%';
'%\%' 패턴은 “임의의 문자열 뒤에 리터럴 %가 오는 경우”, 즉 % 문자로 끝나는 레코드만 일치시킵니다. 실행 결과는 다음과 같습니다.
+-----------+----------------+ | StudentId | StudentSubject | +-----------+----------------+ | 1 | MySQL% | +-----------+----------------+ 1 row in set (0.00 sec)
5. 위치별 이스케이프 패턴 정리
- 문자열 끝의 % 검색:
LIKE '%\%' - 문자열 시작(왼쪽)의 % 검색:
LIKE '\%%' - 문자열 중간의 % 검색:
LIKE '%\%%'
예를 들어 왼쪽에 %가 있는 '%Java'를 찾으려면 다음과 같이 작성할 수 있습니다.
mysql> select *from DemoTable629 where StudentSubject like '\%%';
참고: ESCAPE 절로 다른 이스케이프 문자 지정하기
백슬래시 대신 다른 문자를 이스케이프 문자로 사용하고 싶다면 ESCAPE 절을 활용할 수 있습니다.
mysql> select *from DemoTable629 where StudentSubject like '%!%' escape '!';
이처럼 와일드카드인 %를 일반 문자로 취급해야 할 때는 반드시 이스케이프 처리를 해주어야 원하는 조건에 맞는 결과를 정확하게 얻을 수 있습니다.