SQL Server escapa de un guión bajo

Resuelto GateKiller asked hace 16 años • 8 respuestas

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

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

Where Username Like '%_d'
GateKiller avatar Aug 08 '08 18:08 GateKiller
Aceptado

Referencia de T-SQL para LIKE :

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

Para tu caso:

... LIKE '%[_]d'
Lasse V. Karlsen avatar Aug 08 '2008 11:08 Lasse V. Karlsen

Obviamente la solución @Lasse es correcta, pero hay otra manera de resolver su problema: el operador T-SQL define la cláusula ESCAPELIKE opcional , que le permite declarar un carácter que escapará del 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 avatar May 02 '2012 14:05 Gerardo Lima

Agregar [ ]hizo el trabajo por mí

like '%[\\_]%'
Alex C. avatar Feb 05 '2021 19:02 Alex C.

Estas soluciones tienen totalmente sentido. Desafortunadamente, ninguno de los dos funcionó para mí como esperaba. En lugar de intentar molestarlo, elegí una solución alternativa:

select *
from information_schema.columns 
where replace(table_name,'_','!') not like '%!%'
order by table_name
Tek Mailer avatar Jun 01 '2018 19:06 Tek Mailer

Tuve un problema similar al usar el patrón similar '%_%'no funcionó, como indica la pregunta :-)

Usar '%\_%'tampoco funcionó ya que esto primero \se interpreta "antes de lo similar".

Usando '%\\_%'obras. La \\(doble barra invertida) primero se convierte en simple \(barra invertida) y luego se usa en el mismo patrón.

Freddy Madsen avatar Oct 01 '2020 10:10 Freddy Madsen