SQL Server Escape un guion bajo


¿Cómo puedo escapar del carácter de subrayado?

Estoy escribiendo algo como la siguiente cláusula where y quiero poder encontrar entradas reales con _d al final.

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

3 answers

Referencia de T-SQL para LIKE for SQL Server 2000:

Puede usar los caracteres coincidentes del patrón comodín como caracteres literales. Para usar un carácter comodín como carácter literal, encierre el carácter comodín entre paréntesis. La tabla muestra varios ejemplos de uso de la palabra clave LIKE y los caracteres comodín [].

Para su caso:

... 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-08 11:59:36

Obviamente la solución @Lasse es correcta, pero hay otra manera de resolver el problema: El operador T-SQL LIKE define la cláusula opcional ESCAPE, que le permite declarar un carácter que escapará al siguiente carácter en el patrón.

Para su caso, las siguientes cláusulas WHERE son equivalentes:

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-02 14:20:40

Estas soluciones tienen sentido. Desafortunadamente, ninguno funcionó para mí como esperaba. En lugar de tratar de molestar con él, me fui con un trabajo alrededor:

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-01 19:50:03