MySQL에서 VARCHAR 타입의 컬럼 값에 백분율 기호(%)가 포함되어 있는지 확인하려면 LIKE 연산자와 함께 ESCAPE 절을 사용하면 됩니다. 일반적으로 LIKE 패턴에서 %는 와일드카드로 해석되기 때문에, 이스케이프 문자를 지정하여 리터럴한 % 기호 자체를 검색해야 합니다.
기본 문법
SELECT * FROM yourTableName WHERE yourColumnName like '%|%%' escape '|';
위 문법에서 |(파이프) 문자가 이스케이프 문자로 지정되었으며, |%는 와일드카드가 아닌 실제 % 문자를 의미합니다.
예제 테이블 생성
문법을 실제로 이해하기 위해 예제 테이블을 먼저 만들어 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table FindPercentInVarcharDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Words varchar(30),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.51 sec)% 기호가 포함된 데이터 삽입
INSERT 명령을 사용하여 % 기호가 들어간 레코드와 그렇지 않은 레코드를 함께 입력합니다.
mysql> insert into FindPercentInVarcharDemo(Words) values('This is a My%SQL Program');
Query OK, 1 row affected (0.19 sec)
mysql> insert into FindPercentInVarcharDemo(Words) values('Java is an object oriented');
Query OK, 1 row affected (0.19 sec)
mysql> insert into FindPercentInVarcharDemo(Words) values('C# is also an object%oriented');
Query OK, 1 row affected (0.57 sec)전체 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from FindPercentInVarcharDemo;
실행 결과는 다음과 같습니다.
+----+-------------------------------+ | Id | Words | +----+-------------------------------+ | 1 | This is a My%SQL Program | | 2 | Java is an object oriented | | 4 | C# is also an object%oriented | +----+-------------------------------+ 3 rows in set (0.00 sec)
% 기호 검색 쿼리 실행
이제 ESCAPE 절을 활용하여 Words 컬럼에 % 기호가 포함된 행만 조회하는 쿼리를 실행합니다.
mysql> select *from FindPercentInVarcharDemo where Words like '%|%%' escape '|';
결과를 보면 % 기호가 포함된 레코드만 정확히 필터링되어 출력됩니다.
+----+-------------------------------+ | Id | Words | +----+-------------------------------+ | 1 | This is a My%SQL Program | | 4 | C# is also an object%oriented | +----+-------------------------------+ 2 rows in set (0.00 sec)
정리
LIKE 패턴 내에서 % 문자를 일반 문자로 취급하려면 반드시 ESCAPE 절로 이스케이프 문자를 지정해야 합니다. 위 예제처럼 '%|%%' 패턴과 escape '|' 조합을 사용하면 MySQL에서도 손쉽게 특정 컬럼에 % 기호가 포함된 데이터를 찾을 수 있습니다.