SQL Server escapa de un guión bajo
¿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'
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'
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 '^';
Agregar [ ]
hizo el trabajo por mí
like '%[\\_]%'
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
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.