¿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'
¿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'
Respuestas:
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'
Obviamente, la solución @Lasse es correcta, pero hay otra forma de resolver su problema: el operador T-SQL LIKE
define 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 '^';
ESCAPE
cláusula es parte del estándar SQL y funcionará en cualquier DBMS, no solo en SQL Server.
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
Esto funcionó para mí, solo usa el escape
'%\_%'
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