1. ESCAPE关键字的使用
SQL의 LIKE 연산자에서 와일드카드 문자를 실제 문자本身として検索する必要がある 경우, ESCAPE 키워드를 사용하여 이스케이프 문자를 정의할 수 있다. 이스케이프 문자는 와일드카드 바로 앞에 배치하며, 이렇게 하면 해당 와일드카드는 일반 문자로 인식된다.
예를 들어, 문자열 내에 5%를 포함하는 데이터를 검색하려면 다음과 같이 작성한다:
SELECT *
FROM products
WHERE product_code LIKE '%5/%%' ESCAPE '/'
위 쿼리에서 두 번째 %는 이스케이프 문자 / 뒤에 위치하므로 일반 문자로 처리되어 실제로 5% 문자열을 검색하게 된다.
2. 이스케이프 문자의 기본 개념
ESCAPE 'escape_character' 구문을 사용하면 문자열 내에서 와일드카드를 특수 문자가 아닌 리터럴 문자로 검색할 수 있다. 이스케이프 문자는 와일드카드 문자 앞에 배치하여 해당 문자의 특수 기능을 비활성화한다.
SELECT *
FROM members
WHERE nickname LIKE 'hero_!' ESCAPE '!'
위 예제의 경우: 리터럴 문자 "hero_"를 찾으려고 할 때, LIKE 'hero_'는 heroa, herob 등의 다양한 문자열과 매칭된다. 그러나 ESCAPE '!'를 사용하면 ! 뒤에 오는 _를 일반 문자로 인식하여 정확히 "hero_" 문자열만 검색한다.
3. 실전 적용 예제
CREATE TABLE inventory (
item_name VARCHAR(50)
)
GO
INSERT INTO inventory VALUES ('전자#25')
INSERT INTO inventory VALUES ('전자#37')
INSERT INTO inventory VALUES ('의류#42')
GO
SELECT * FROM inventory
WHERE item_name LIKE '%/#37' ESCAPE '/'
GO
DROP TABLE inventory
실행 결과:
item_name
----------
전자#37
의류#42
이 예제에서는 /를 이스케이프 문자로 지정하여 # 기호를 일반 문자로 처리하고 있다.
4. 대괄호를 이용한 특수문자 매칭
SQL Server에서는 특정 와일드카드 문자(% , _ , [ , ])를 리터럴로 매칭하기 위해 대괄호 []를 사용할 수 있다.
| 기호 | 의미 |
|---|---|
| % | 0개 이상의任意문자 |
| _ | 1개의任意문자 |
| [] | 지정된 범위 내의 문자 하나 |
| [^] | 지정된 범위를 제외한 문자 |
특수문자 매칭 예제
| 패턴 | 매칭 대상 |
|---|---|
LIKE '7\[%\]' | 7% |
LIKE '\[\_\]m' | _m |
LIKE '\[a-cdf\]' | a, b, c, d, f |
LIKE '\[-acdf\]' | -, a, c, d, f |
LIKE '\[\[\]' | [ |
LIKE '\]' | ] |
LIKE 'data\[\_\]f%' | data_f, data_fa |
LIKE 'data\[xyz\]' | datax, datay, dataz |
LIKE '\[^0-9\]' | 숫자 제외 모든 문자 |
구체적인 SQL 예제
-- 대괄호를 사용하여 리터럴 [ 검색
SELECT 1 WHERE '[DEFghij' LIKE '[[]%'
-- 대괄호를 사용하여 리터럴 ] 검색
SELECT 1 WHERE ']DEFghij' LIKE ']%'
-- 대괄호를 사용하여 리터럴 [] 검색
SELECT 1 WHERE '[]DEFghij' LIKE '[[]]%%'
-- 대괄호를 사용하여 리터럴 _ 검색
SELECT 1 WHERE '_DEFghij' LIKE '[_]%'
-- 대괄호를 사용하여 리터럴 % 검색
SELECT 1 WHERE 'ABC%DEF' LIKE 'ABC[%]DEF'
5. ESCAPE를 통한 전역 이스케이프 처리
캐럿(^), 하이픈(-), 닫는 대괄호(])와 같은 특수 문자의 경우, 它们本身が含まれているため 대괄호 방식만으로는 처리하기 어렵다. 이때 ESCAPE 절을 사용하면 모든 특수 문자를 일관되게 처리할 수 있다.
-- 다양한 이스케이프 문자 사용 예제
SELECT 1 WHERE '^XYZabc' LIKE '!^XYZabc' ESCAPE '!'
SELECT 1 WHERE '-XYZabc' LIKE '!-XYZabc' ESCAPE '!'
SELECT 1 WHERE ']XYZabc' LIKE '!]XYZabc' ESCAPE '!'
SELECT 1 WHERE '%XYZabc' LIKE '\%XYZabc' ESCAPE '\'
SELECT 1 WHERE '%XYZabc' LIKE '!%XYZabc' ESCAPE '!'
SELECT 1 WHERE '%XYZabc' LIKE '#%XYZabc' ESCAPE '#'
SELECT 1 WHERE '%XYZabc' LIKE '@%XYZabc' ESCAPE '@'
SELECT 1 WHERE '[XYZabc' LIKE '![XYZabc' ESCAPE '!'
SELECT 1 WHERE ']XYZabc' LIKE '!]XYZabc' ESCAPE '!'
위의 예제에서 확인できる 규칙은 이스케이프 문자 바로 다음에 오는 특수 문자가 일반 문자로 처리된다는 것이다. 이는 C 언어의 이스케이프 시퀀스와 유사한 원리이다.
6. 복합 패턴 매칭 사례
より複雑な매칭이 필요한 경우, 이스케이프 문자와 대괄호를 함께 사용할 수 있다:
SELECT 1 WHERE '[^A-Z]VWXYZ' LIKE '\[\^A\-Z\]%' ESCAPE '\'
이 쿼리는 대괄호 안에 포함된 리터럴 문자(^, A-Z)를 찾기 위해 이스케이프 문자를 활용하는 방법을 보여준다.