sql server - uso - ¿Cómo puedo escapar de los corchetes en una cláusula LIKE?
sql server like escape char (8)
De acuerdo con la documentation :
Puede usar los caracteres de coincidencia de patrón comodín como caracteres literales. Para usar un carácter comodín como carácter literal, encierre el carácter comodín entre corchetes.
Necesitas escapar estos tres caracteres %_[
:
''5%'' LIKE ''5[%]'' -- true
''5$'' LIKE ''5[%]'' -- false
''foo_bar'' LIKE ''foo[_]bar'' -- true
''foo$bar'' LIKE ''foo[_]bar'' -- false
''foo[bar'' LIKE ''foo[[]bar'' -- true
''foo]bar'' LIKE ''foo]bar'' -- true
Intento filtrar elementos con un procedimiento almacenado usando like. La columna es un varchar (15). Los elementos que intento filtrar tienen corchetes en el nombre.
Por ejemplo: WC[R]S123456
.
Si hago un LIKE ''WC[R]S123456''
no devolverá nada.
Encontré información sobre el uso de la palabra clave ESCAPE
con LIKE
pero no entiendo cómo usarla para tratar los corchetes como una cadena normal.
Digamos que quieres hacer coincidir el literal its[brac]et
.
No necesita escapar de ]
ya que tiene un significado especial solo cuando está emparejado con [
.
Por lo tanto, escapar [
suficiente para resolver el problema. Puede escapar [
reemplazándolo por [[]
.
En lugar de ''/' u otro carácter en el teclado, también puede usar caracteres especiales que no están en el teclado. Dependiendo de su caso de uso, esto podría ser necesario, si no desea que la entrada del usuario se use accidentalmente como un carácter de escape.
Esto es lo que realmente utilicé:
like ''WC![R]S123456'' ESCAPE ''!''
La palabra clave ESCAPE se usa si necesita buscar caracteres especiales como% y _, que normalmente son comodines. Si especifica ESCAPE, SQL buscará literalmente los caracteres% y _.
Aquí hay un buen artículo con algunos ejemplos más
SELECT columns FROM table WHERE
column LIKE ''%[[]SQL Server Driver]%''
-- or
SELECT columns FROM table WHERE
column LIKE ''%/[SQL Server Driver]%'' ESCAPE ''/'
Necesitaba excluir los nombres que comenzaban con un guión bajo de una consulta, así que terminé con esto:
WHERE b.[name] not like ''/_%'' escape ''/' -- use / as the escape character
Si necesita escapar de caracteres especiales como ''_'' (guión bajo), como en mi caso, y no está dispuesto / no puede definir una cláusula ESCAPE, puede incluir el carácter especial entre corchetes ''[ '' y ''] '' .
Esto explica el significado de la cadena "extraña" [[]] - simplemente abarca el carácter "[" con corchetes, escapándose efectivamente.
Mi caso de uso fue especificar el nombre de un procedimiento almacenado con guiones bajos en él como un criterio de filtro para el Analizador. Así que puse la cadena ''% name [_] of [_] a [_] stored [_] procedure%'' en un campo TextData LIKE y me dio los resultados de seguimiento que quería lograr.
Aquí hay un buen ejemplo de la documentación: LIKE (Transact-SQL) - Uso de caracteres comodín como literales
LIKE ''WC[[]R]S123456''
o
LIKE ''WC/[R]S123456'' ESCAPE ''/'
Deberia trabajar.