SQL Server Escape podkreślenie


338

Jak uciec od znaku podkreślenia?

Piszę coś takiego jak klauzula where i chcę być w stanie znaleźć rzeczywiste wpisy z _d na końcu.

Where Username Like '%_d'

Odpowiedzi:


523

Dokumentacja T-SQL dla LIKE :

Możesz używać znaków pasujących do wzoru wieloznacznego jako literalnych znaków. Aby użyć znaku wieloznacznego jako literału, umieść go w nawiasach. Poniższa tabela pokazuje kilka przykładów użycia słowa kluczowego LIKE i symboli wieloznacznych [].

W twoim przypadku:

... LIKE '%[_]d'

o stary! ... jeśli nadal nie działa, upewnij się, że kolumna ma rację.
Jens Frandsen,

198

Oczywiście rozwiązanie @Lasse jest słuszne, ale istnieje inny sposób rozwiązania problemu: operator T-SQL LIKEdefiniuje opcjonalną klauzulę ESCAPE , która pozwala zadeklarować znak, który ucieknie od następnego znaku do wzorca.

W twoim przypadku następujące klauzule WHERE są równoważne:

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

43
Aby uzupełnić obraz: ESCAPEklauzula jest częścią standardu SQL i będzie działać na dowolnym DBMS, nie tylko SQL Server.
a_horse_w_no_name

2

Te rozwiązania są całkowicie sensowne. Niestety, żadne nie działało dla mnie zgodnie z oczekiwaniami. Zamiast próbować sobie z tym poradzić, zacząłem pracować:

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


0

Żadne z nich nie działało dla mnie w SSIS v18.0, więc chciałbym zrobić coś takiego:…

WHERE CHARINDEX('_', thingyoursearching) < 1

gdzie staram się ignorować ciągi znaków z podkreśleniem. Jeśli chcesz znaleźć rzeczy, które mają podkreślenie, po prostu odwróć:

WHERE CHARINDEX('_', thingyoursearching) > 0

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.