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'
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:
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'
Oczywiście rozwiązanie @Lasse jest słuszne, ale istnieje inny sposób rozwiązania problemu: operator T-SQL LIKE
definiuje 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 '^';
ESCAPE
klauzula jest częścią standardu SQL i będzie działać na dowolnym DBMS, nie tylko SQL Server.
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
To działało dla mnie, po prostu skorzystaj z ucieczki
'%\_%'
Ż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