같은 조항에서 사각형 괄호를 어떻게 탈출 할 수 있습니까?
-
22-07-2019 - |
문제
Like를 사용하여 저장된 절차로 품목을 필터링하려고합니다. 열은 바르 차르 (15)입니다. 필터링하려는 항목에는 이름에 정사각형 괄호가 있습니다.
예를 들어: WC[R]S123456
.
내가한다면 LIKE 'WC[R]S123456'
아무것도 돌려주지 않을 것입니다.
사용에 대한 정보를 찾았습니다 ESCAPE
키워드 LIKE
그러나 정사각형 브래킷을 일반 문자열로 취급하는 데 사용하는 방법을 이해하지 못합니다.
해결책
LIKE 'WC[[]R]S123456'
또는
LIKE 'WC\[R]S123456' ESCAPE '\'
작동해야합니다.
다른 팁
문자를 맞추고 싶다고 가정 해 봅시다 its[brac]et
.
당신은 탈출 할 필요가 없습니다 ]
쌍을 이룰 때만 특별한 의미가 있으므로 [
.
따라서 탈출 [
문제를 해결하기에 충분합니다. 당신은 탈출 할 수 있습니다 [
교체함으로써 [[]
.
쿼리에서 밑줄로 시작한 이름을 제외해야했기 때문에 다음과 같습니다.
WHERE b.[name] not like '\_%' escape '\' -- use \ as the escape character
내가 실제로 사용한 것은 다음과 같습니다.
like 'WC![R]S123456' ESCAPE '!'
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 '\'
특수 캐릭터를 피해야한다면 '_' (밑줄), 내 경우와 마찬가지로, 당신은 탈출 조항을 기꺼이/정의 할 수 없으며, 정사각형 괄호로 특수 문자를 둘러싸고 싶을 수도 있습니다. '[' 그리고 ']'.
이것은 "이상한"문자열의 의미를 설명합니다. '[[]' - 그것은 단지 그것을 포용합니다 '[' 사각형 괄호가있는 캐릭터, 효과적으로 탈출합니다.
제 사용 사례는 프로파일 러의 필터 기준으로 밑줄이있는 저장 프로 시저의 이름을 지정하는 것이 었습니다. 그래서 나는 문자열을 넣었다 '%이름 [_] [_] a [_] 저장된 [_] 절차%' 필드와 같은 TextData에서는 내가 달성하고 싶었던 추적 결과를 주었다.
다음은 문서의 좋은 예입니다.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
키보드의 ''또는 다른 문자 대신 키보드에없는 특수 문자를 사용할 수도 있습니다. 사용 사례에 따라 사용자 입력이 실수로 탈출 문자로 사용되도록 원하지 않는 경우 필요할 수 있습니다.
다음을 사용하십시오.
사용자 입력이 그대로 검색하려면 Escape를 사용하십시오. 모든 특수 문자를 대체해야합니다 (아래의 모든 SQL Server는 아래).
여기서 단일 인용문 " '"은 문자열 연결 문제이므로 절과 같은 영향을 미치지 않기 때문에 취해지지 않습니다.
"-"& "^"& "]탈출 할 때 대체가 필요하지 않습니다 [".
String FormattedString = "UserString".Replace("ð","ðð").Replace("_", "ð_").Replace("%", "ð%").Replace("[", "ð[");
그런 다음 SQL 쿼리에서는 다음과 같습니다. (매개 변수화 된 쿼리에서 위의 교체 후 패턴으로 문자열을 추가 할 수 있습니다).
정확한 문자열을 검색합니다.
like 'FormattedString' ESCAPE 'ð'
문자열로 시작합니다
like '%FormattedString' ESCAPE 'ð'
문자열로 끝을 검색합니다
like 'FormattedString%' ESCAPE 'ð'
문자열이 포함되어 있습니다
like '%FormattedString%' ESCAPE 'ð'
다른 패턴 매칭을 위해. 그러나 직접 사용자 입력은 위에서 언급했듯이 포맷해야합니다.