source

괄호 문자가 포함된 SQL Server LIKE

ittop 2023. 7. 6. 22:34
반응형

괄호 문자가 포함된 SQL Server LIKE

SQL Server 2008을 사용하고 있습니다.다음 열이 있는 테이블이 있습니다.

sampleData (nvarchar(max))

이러한 행 중 일부에서 이 열의 값은 다음과 같이 형식이 지정된 목록입니다.

["value1","value2","value3"]

나는 오프닝 브래킷만 감지하여 모든 행을 이와 같은 형식의 목록으로 반환하는 간단한 쿼리를 작성하려고 합니다.

SELECT * from sampleTable where sampleData like '[%'

'['은 특수 문자이므로 위 쿼리가 작동하지 않습니다.쿼리가 원하는 작업을 수행하도록 브래킷을 탈출하려면 어떻게 해야 합니까?

 ... like '[[]%'

사용자[ ]특수 문자(또는 범위)를 둘러싸는 것입니다.

SQL Server LIKE의 "와일드카드 문자를 리터럴로 사용" 섹션을 참조하십시오.

참고: 클로징 브래킷에서 벗어날 필요는 없습니다.

gbn의 답변과는 별개로 다른 방법은ESCAPE옵션:

SELECT * from sampleTable where sampleData like '\[%' ESCAPE '\'

자세한 내용은 Transact-SQL 설명서를 참조하십시오.

여기서 한 가지만 더...

문자 집합 내에 괄호(또는 기타 특수)를 포함하려면 괄호를 사용하여 집합을 표시하고 있으므로 이스케이프(EXCAPE)를 사용하는 옵션만 사용할 수 있습니다.

또한 기본 이스케이프 문자가 없기 때문에 Escape 절을 지정해야 합니다(처음 생각했던 것처럼 기본적으로 C 배경에서 오는 백슬래시가 아닙니다).

예를 들어, 열에 '허용 가능한' 문자 집합 이외의 다른 문자가 포함된 행을 추출하려면 인수를 위해 영숫자라고 합니다.우리는 이것으로 시작할 수 있습니다.

SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9]%'

따라서 목록에 없는 문자(선행 캐럿 ^ 문자로 인해)는 모두 반환됩니다.

그런 다음 이 허용 가능한 문자 집합에 특수 문자를 추가하려면 괄호를 중첩할 수 없으므로 이스케이프 문자를 사용해야 합니다.

SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9\[\]]%' ESCAPE '\'

괄호 앞에 백슬래시를 개별적으로 붙이고 이스케이프 문자에 백슬래시를 사용하고 있음을 나타내면 문자 집합을 나타내는 작동 중인 괄호 안에서 괄호를 벗어날 수 있습니다.

언급URL : https://stackoverflow.com/questions/3661125/sql-server-like-containing-bracket-characters

반응형