programing

SQL Server 언더스코어 이스케이프

bestprogram 2023. 4. 7. 22:03

SQL Server 언더스코어 이스케이프

어떻게 하면 밑줄을 피할 수 있을까요?

저는 다음과 같은 where 절을 쓰고 있으며, 마지막에 _d로 실제 엔트리를 찾을 수 있도록 하고 싶습니다.

Where Username Like '%_d'

LIKE에 대한 T-SQL 참조:

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

고객님의 경우:

... LIKE '%[_]d'

@Lasse 솔루션이 맞는 것은 분명하지만 문제를 해결하는 다른 방법이 있습니다.T-SQL 연산자LIKE옵션의 EXCAPE 구를 정의합니다.이 구를 사용하면 다음 문자를 패턴으로 이스케이프할 문자를 선언할 수 있습니다.

이 경우 다음 WHERE 절이 동일합니다.

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

추가 중[ ]나를 위해 일을 했다

like '%[\\_]%'

이 솔루션들은 완전히 타당합니다.유감스럽게도 어느 쪽도 기대했던 대로 되지 않았습니다.저는 이 문제를 해결하기 위해 노력하지 않고 다음과 같은 작업을 수행했습니다.

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

like 패턴을 사용하여 비슷한 문제가 발생하였습니다.'%_%'동작하지 않았습니다.질문에 나타나 있듯이:-)

사용.'%\_%'이것도 처음처럼 작동하지 않았다\"before like"로 해석됩니다.

사용.'%\\_%'동작하고 있습니다.\\(이중 백슬래시)는 처음에 싱글로 변환됩니다.\(백슬래시) 및 같은 패턴으로 사용됩니다.

나한테는 통했어 그냥 탈출구를 써'%\_%'

SSIS v18.0에서는 어느 것도 기능하지 않기 때문에, 다음과 같은 작업을 실시합니다.

WHERE CHARINDEX('_', thingyoursearching) < 1

밑줄이 있는 문자열은 무시하려고 합니다.밑줄이 있는 것을 찾으려면 뒤집기만 하면 됩니다.

WHERE CHARINDEX('_', thingyoursearching) > 0

Gerardo Lima의 답변에 덧붙여, ESCAPE 조항의 이스케이프 캐릭터로서 백슬래시를 사용하려고 할 때 문제가 있었습니다.이로 인해 다음과 같은 문제가 발생했습니다.

SELECT * FROM table WHERE email LIKE '%@%\_%' ESCAPE '\'

이 문제는 느낌표로 전환하여 해결되었습니다.이것은 효과가 있었다:

SELECT * FROM table WHERE email LIKE '%@%!_%' ESCAPE '!'

언급URL : https://stackoverflow.com/questions/5821/sql-server-escape-an-underscore