밑줄을 이탈하는 SQL Server


338

밑줄 문자를 어떻게 피합니까?

다음 where 절과 같은 것을 작성하고 끝에 _d로 실제 항목을 찾을 수 있기를 원합니다.

Where Username Like '%_d'

답변:


523

LIKE에 대한 T-SQL 참조 :

와일드 카드 패턴 일치 문자를 리터럴 문자로 사용할 수 있습니다. 와일드 카드 문자를 리터럴 문자로 사용하려면 와일드 카드 문자를 괄호로 묶습니다. 다음 표는 LIKE 키워드와 [] 와일드 카드 문자를 사용하는 몇 가지 예를 보여줍니다.

귀하의 경우 :

... LIKE '%[_]d'

오! ... 그래도 작동하지 않으면 열이 올바른지 확인하십시오.
Jens Frandsen

198

분명히 @Lasse 솔루션이 맞지만 문제를 해결하는 또 다른 방법이 있습니다. T-SQL 연산자 LIKE는 선택적 ESCAPE 절을 정의 하여 다음 문자를 패턴으로 이스케이프 할 문자를 선언 할 수 있습니다.

귀하의 경우 다음 WHERE 절은 동일합니다.

WHERE username LIKE '%[_]d';            -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';

43
그림을 완성하려면이 ESCAPE절은 SQL 표준의 일부이며 SQL Server뿐만 아니라 모든 DBMS에서 작동합니다.
a_horse_with_no_name 7

2

이러한 솔루션은 전적으로 의미가 있습니다. 불행히도 어느 것도 예상대로 작동하지 않았습니다. 번거 로움을 피하기 위해 해결 방법을 찾았습니다.

select * from information_schema.columns 
where replace(table_name,'_','!') not like '%!%'
order by table_name


0

이들 중 어느 것도 SSIS v18.0에서 나에게 도움이되지 않았으므로 다음과 같이 할 것입니다 :

WHERE CHARINDEX('_', thingyoursearching) < 1

.. 여기서 밑줄이있는 문자열을 무시하려고합니다. 밑줄이있는 것을 찾으려면 뒤집으십시오.

WHERE CHARINDEX('_', thingyoursearching) > 0

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.