IT story

LIKE 절에서 대괄호를 어떻게 피할 수 있습니까?

hot-time 2020. 4. 25. 09:56
반응형

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

반응형