programing

LIKE 절에서 대괄호를 이스케이프하려면 어떻게 해야 합니까?

codeshow 2023. 4. 7. 21:48
반응형

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 '!'

EXCAPE 키워드는 % 및 _ 등의 특수문자를 검색할 필요가 있을 때 사용합니다.특수문자는 보통 와일드카드입니다.Escape를 지정하면 SQL은 문자 그대로 % 및 _ 문자를 검색합니다.

여기 몇 가지 예시와 함께 좋은 기사가 있습니다.

SELECT columns FROM table WHERE 
    column LIKE '%[[]SQL Server Driver]%' 

-- or 

SELECT columns FROM table WHERE 
    column LIKE '%\[SQL Server Driver]%' ESCAPE '\'

설명서에 따르면:

와일드카드 패턴 매칭 문자를 리터럴 문자로 사용할 수 있습니다.와일드카드 문자를 리터럴 문자로 사용하려면 와일드카드 문자를 괄호로 묶습니다.

이 세 글자를 탈출해야 합니다.%_[:

'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

제 경우와 같이 '_'(밑줄)과 같은 특수문자를 이스케이프해야 할 경우 EXCAPE 절을 정의할 의향이 없거나 정의할 수 없는 경우 특수문자를 대괄호 '['']'로 묶을 수 있습니다.

이것은 '이상한' 문자열 '[]'의 의미를 설명해 줍니다.각괄호로 '[]'자를 감싸고 있기 때문에 효과적으로 빠져나갈 수 있습니다.

사용 예에서는 Profiler의 필터 기준으로 저장 프로시저의 이름을 밑줄로 지정했습니다.그래서 문자열 '%name[_] of [_]a[_]stored[_]procedure%'를 TextData LIKE 필드에 입력했더니 원하는 트레이스 결과를 얻을 수 있었습니다.

다음으로 설명서의 좋은 예를 제시하겠습니다.LIKE ( Transact - SQL ) - Wildcard Characters As Literals (Wildcard Characters As Literals 。

그 사이에 문제가 있다

LIKE 'WC[[]R]S123456'

그리고.

LIKE 'WC\[R]S123456' ESCAPE '\'

둘 다 SQL Server에서는 동작하지만 Oracle에서는 동작하지 않습니다.

ISO/IEC 9075는 왼쪽 가새와 관련된 패턴을 인식할 수 있는 방법이 없는 것 같습니다.

키보드의 '\' 또는 다른 문자 대신 키보드에 없는 특수 문자를 사용할 수도 있습니다.사용자 입력을 이스케이프 문자로 사용하지 않으려면 사용 사례에 따라 이 작업이 필요할 수 있습니다.

다음을 사용합니다.

사용자 입력을 그대로 검색하려면 excape를 사용합니다.모든 특수문자에 대해 다음과 같은 대체가 필요합니다(아래는 SQL Server의 모든 내용을 포함합니다).

여기서 단일 따옴표 ""는 문자열 연결의 문제이기 때문에 like 구에 영향을 주지 않으므로 사용되지 않습니다.

「-」와「^」와「]의 치환은 불필요합니다.「」는, 「」를 탈출하고 있기 때문입니다.

String FormattedString = "UserString".Replace("ð","ðð").Replace("_", "ð_").Replace("%", "ð%").Replace("[", "ð[");

그런 다음 SQL Query에서는 다음과 같습니다.(파라미터화된 쿼리에서는 위의 치환 후에 패턴을 사용하여 문자열을 추가할 수 있습니다).

정확한 문자열을 검색합니다.

like 'FormattedString' ESCAPE 'ð'

문자열로 시작하는 검색 방법:

like '%FormattedString' ESCAPE 'ð'

문자열로 끝을 검색하려면:

like 'FormattedString%' ESCAPE 'ð'

문자열을 사용하여 다음을 검색하려면:

like '%FormattedString%' ESCAPE 'ð'

다른 패턴 매칭도 마찬가지입니다.단, 사용자 직접 입력은 위와 같이 포맷해야 합니다.

언급URL : https://stackoverflow.com/questions/439495/how-can-i-escape-square-brackets-in-a-like-clause

반응형