SQL Server Escape an Underscore

Jak uciec od znaku podkreślenia?

Piszę coś w stylu poniższej klauzuli where i chcę być w stanie znaleźć rzeczywiste wpisy z _d na końcu.

Where Username Like '%_d'
 243
Author: brett rogers, 2008-08-08

3 answers

T-SQL Reference for LIKE for SQL Server 2000:

Można używać znaków pasujących do wzorców wieloznacznych jako znaków literalnych. Aby użyć znaku wieloznacznego jako literalnego, należy umieścić go w nawiasach. Tabela pokazuje kilka przykładów użycia słowa kluczowego LIKE I znaków wieloznacznych [].

W Twoim przypadku:

... LIKE '%[_]d'
 379
Author: Lasse Vågsæther Karlsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-08 11:59:36

Oczywiście @Lasse solution ma rację, ale jest inny sposób na rozwiązanie problemu: operator T-SQL LIKE definiuje opcjonalną klauzulę ESCAPE , która pozwala zadeklarować znak, który będzie uciekał od następnego znaku do wzorca.

W Twoim przypadku, następujące zdania są równoważne:

WHERE username LIKE '%[_]d';            -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';
 151
Author: Gerardo Lima,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-02 14:20:40

Te rozwiązania mają sens. Niestety, żadne z nich nie zadziałało zgodnie z oczekiwaniami. Zamiast próbować się z tym kłopotać, poszedłem do pracy wokół:

select * from information_schema.columns 
where replace(table_name,'_','!') not like '%!%'
order by table_name
 0
Author: Tek Mailer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-01 19:50:03