SQL Server Escape un subrayado

339

¿Cómo escapo el carácter de subrayado?

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

Where Username Like '%_d'
GateKiller
fuente

Respuestas:

525

Referencia de T-SQL para LIKE :

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

Para su caso:

... LIKE '%[_]d'
Lasse V. Karlsen
fuente
¡Oh hombre! ... si aún no funciona, asegúrese de tener la columna correcta.
Jens Frandsen
198

Obviamente, la solución @Lasse es correcta, pero hay otra forma de resolver su problema: el operador T-SQL LIKEdefine el ESCAPE opcional cláusula , 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 '^';
Gerardo Lima
fuente
43
Para completar la imagen: la ESCAPEcláusula es parte del estándar SQL y funcionará en cualquier DBMS, no solo en SQL Server.
a_horse_with_no_name
2

Estas soluciones tienen mucho sentido. Desafortunadamente, ninguno funcionó para mí como se esperaba. En lugar de tratar de molestarlo, decidí solucionar el problema:

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

Esto funcionó para mí, solo usa el escape '%\_%'

Arnór Barkarson
fuente
0

Ninguno de estos funcionó para mí en SSIS v18.0, por lo que seguiría haciendo algo como esto:

WHERE CHARINDEX('_', thingyoursearching) < 1

... donde estoy tratando de ignorar las cadenas con un guión bajo en ellas. Si quieres encontrar cosas que tienen un guión bajo, solo dale la vuelta:

WHERE CHARINDEX('_', thingyoursearching) > 0

wolverine87
fuente