Buscar filas con caracteres especiales en SQL Server
Al solucionar un problema de programación hoy, noté que no se puede usar una búsqueda LIKE para columnas de cadena que contienen caracteres especiales como% o _ sin usar una sintaxis especial. Descubrir el problema tomó solo unos minutos, pero recordar la sintaxis siempre es más fácil si escribes sobre eso.
Así que sí, este post es únicamente para mi beneficio. Esperemos que ayude a alguien más también..
Supongamos que desea buscar cualquier campo que contenga el texto "100%", por lo que reunimos esta consulta:
SELECT * FROM nombre de tabla WHERE fieldname LIKE '% 100 %%'
En lugar de lo que querías, obtendrás todas las filas que contienen "100", así como las filas que contienen "100%".
El problema aquí es que SQL Server utiliza el signo de porcentaje, el subrayado y los corchetes como caracteres especiales. Simplemente no puede usarlos como un carácter simple en una consulta LIKE sin escapar de ellos.
Escape de soporte cuadrado
Puede rodear el% o _ entre corchetes para indicar a SQL Server que el carácter que hay dentro es un carácter regular.
SELECT * FROM nombre de tabla WHERE fieldname LIKE '% 100 [%]%'
Sintaxis de T-SQL ESCAPE
Alternativamente, puede agregar el operador ESCAPE a su consulta y agregar un carácter \ antes del valor que desea escapar.
SELECT * FROM nombre de tabla WHERE fieldname LIKE '% 100 \ %%' ESCAPE '\'
La parte ESCAPE '\' de la consulta le dice al motor SQL que interprete el carácter después de \ como un carácter literal en lugar de como un comodín.
Personalmente, el segundo método es más fácil de tratar, y puedes usarlo para escapar de un corchete también.