LIKE 절에서 대괄호를 어떻게 피할 수 있습니까?
like를 사용하여 저장 프로 시저로 항목을 필터링하려고합니다. 열은 varchar (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 '\'
필자의 경우 와 같이 '_' (밑줄) 과 같은 특수 문자를 이스케이프해야 하고 ESCAPE 절을 정의 할 수 없거나 정의 할 수없는 경우 특수 문자를 대괄호 '[ ' 및 '] ' .
이것은 "이상한"문자열 '[[]' 의 의미를 설명합니다 . '[' 문자를 대괄호로 묶어서 효과적으로 이스케이프합니다.
필자의 유스 케이스는 프로파일 러의 필터 기준으로 밑줄이있는 저장 프로 시저의 이름을 지정하는 것이 었습니다. 따라서 TextData LIKE 필드 에 문자열 '% name [_] of [_] a [_] stored [_] procedure %'를 입력 했으며 달성하려는 추적 결과를 얻었습니다.
다음은 설명서의 좋은 예입니다. 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 'ð'
다른 패턴 일치에 대해서도 마찬가지입니다. 그러나 직접 사용자 입력은 위에서 언급 한대로 형식을 지정해야합니다.
참고 : https://stackoverflow.com/questions/439495/how-can-i-escape-square-brackets-in-a-like-clause
'IT story' 카테고리의 다른 글
0 값을 제거하지 않고 목록에서 None 값을 제거 (0) | 2020.04.25 |
---|---|
노드에서 es6 가져 오기를 어떻게 사용합니까? (0) | 2020.04.25 |
tmux 모드에서 vim colorscheme을 잃으십시오 (0) | 2020.04.25 |
Java에서 휘발성과 동기화의 차이점 (0) | 2020.04.25 |
프로그래밍 방식으로 번들 식별자 얻기 (0) | 2020.04.25 |