답변:
LIKE 'WC[[]R]S123456'
또는
LIKE 'WC\[R]S123456' ESCAPE '\'
작동해야합니다.
LIKE 'WC\[R]S123456' ESCAPE '\'
유지 관리가 더 읽기 쉽도록 선호 하십시오.
리터럴과 일치한다고 가정 해 봅시다 its[brac]et
.
]
와 쌍을 이룰 때만 특별한 의미를 가지므로 이스케이프 할 필요는 없습니다 [
.
따라서 탈출 [
하면 문제를 해결할 수 있습니다. [
로 바꾸면 탈출 할 수 있습니다 [[]
.
[[]
이상한 것처럼 보이지만 파서의 관점에서 볼 때 의미가 있습니다. 파서에는 사이의 문자를 처리하는 방법에 대한 특정 규칙이 있습니다 [ ]
. 따라서 텍스트 its[brac]et
는 "다음 연속 문자열 찾기 : its
, (대괄호에 규칙 적용 :) brac
, et
"을 의미 합니다. 반면에, its[[]brac]et
수단 : "다음 연속 문자열 찾기 : its
(대괄호를위한 규칙을 적용 : [
) brac]et
" .
ESCAPE 키워드는 일반적으로 와일드 카드 인 % 및 _와 같은 특수 문자를 검색해야하는 경우에 사용됩니다. ESCAPE를 지정하면 SQL은 문자 적으로 % 및 _ 문자를 검색합니다.
SELECT columns FROM table WHERE
column LIKE '%[[]SQL Server Driver]%'
-- or
SELECT columns FROM table WHERE
column LIKE '%\[SQL Server Driver]%' ESCAPE '\'
필자의 경우 와 같이 '_' (밑줄) 과 같은 특수 문자를 이스케이프해야 하고 ESCAPE 절을 정의 할 수 없거나 정의 할 수없는 경우 특수 문자를 대괄호 '[ ' 및 '] ' .
이것은 "이상한"문자열 '[[]' 의 의미를 설명합니다 . '[' 문자를 대괄호로 묶어서 효과적으로 이스케이프합니다.
필자의 유스 케이스는 프로파일 러의 필터 기준으로 밑줄이있는 저장 프로 시저의 이름을 지정하는 것이 었습니다. 그래서 나는 문자열 '% name [_] of [_] a [_] 저장 [_] procedure %'를 넣었습니다. TextData LIKE 필드에 으며 달성하려는 추적 결과를 얻었습니다.
다음은 설명서의 좋은 예입니다. LIKE (Transact-SQL)-와일드 카드 문자를 리터럴로 사용
설명서 에 따르면 :
와일드 카드 패턴 일치 문자를 리터럴 문자로 사용할 수 있습니다. 와일드 카드 문자를 리터럴 문자로 사용하려면 와일드 카드 문자를 괄호로 묶습니다.
이 세 문자를 이스케이프 처리해야합니다 %_[
.
'5%' LIKE '5[%]' -- true
'5$' LIKE '5[%]' -- false
'foo_bar' LIKE 'foo[_]bar' -- true
'foo$bar' LIKE 'foo[_]bar' -- false
'foo[bar' LIKE 'foo[[]bar' -- true
'foo]bar' LIKE 'foo]bar' -- true
다음을 사용하십시오.
사용자 입력을 그대로 검색하려면 이스케이프를 사용하십시오. 모든 특수 문자 (아래의 모든 SQL Server)를 대체해야합니다.
여기서 작은 따옴표 " '"는 문자열 연결 문제이므로 like 절에 영향을주지 않으므로 사용되지 않습니다.
"-"& "^"& "]"은 "["을 (를) 이스케이프하므로 바꿀 필요가 없습니다.
String FormattedString = "UserString".Replace("ð","ðð").Replace("_", "ð_").Replace("%", "ð%").Replace("[", "ð[");
그런 다음 SQL 쿼리에서 다음과 같아야합니다. (매개 변수화 된 쿼리에서 위의 교체 후 패턴으로 문자열을 추가 할 수 있습니다).
정확한 문자열을 검색합니다.
like 'FormattedString' ESCAPE 'ð'
문자열로 시작하여 검색하려면
like '%FormattedString' ESCAPE 'ð'
문자열로 끝을 검색하려면
like 'FormattedString%' ESCAPE 'ð'
문자열로 포함을 검색하려면
like '%FormattedString%' ESCAPE 'ð'
다른 패턴 일치에 대해서도 마찬가지입니다. 그러나 직접 사용자 입력은 위에서 언급 한대로 형식을 지정해야합니다.