Saltar al contenido

Escapa de una cadena en SQL Server para que sea seguro usarla en la expresión LIKE

Solución:

Para escapar de los caracteres especiales en una expresión LIKE, les antepone un carácter de escape. Puede elegir qué carácter de escape usar con la palabra clave ESCAPE. (Ref MSDN)

Por ejemplo, esto escapa del símbolo%, usando como carácter de escape:

select * from table where myfield like '%15% off%' ESCAPE ''

Si no sabe qué caracteres estarán en su cadena y no quiere tratarlos como comodines, puede prefijar todos los caracteres comodín con un carácter de escape, por ejemplo:

set @myString = replace (replace (replace (replace (@myString, '', '\'), '%', '%'), '_', ' _'), '[', '[' )

(Note that you have to escape your escape char too, and make sure that’s the inner replace so you don’t escape the ones added from the other replace statements). Then you can use something like this:

select * from table where myfield like '%' + @myString + '%' ESCAPE ''

Also remember to allocate more space for your @myString variable as it will become longer with the string replacement.

Had a similar problem (using NHibernate, so the ESCAPE keyword would have been very difficult) and solved it using the bracket characters. So your sample would become

WHERE ... LIKE '%aa[%]cama y desayuno%'

Si necesita prueba:

create table test (field nvarchar(100))
go
insert test values ('abcdef%hijklm')
insert test values ('abcdefghijklm')
go
select * from test where field like 'abcdef[%]hijklm'
go

En lugar de escapar todos caracteres en una cadena que tienen un significado particular en la sintaxis del patrón, dado que está utilizando un comodín inicial en el patrón, es más rápido y fácil de hacer.

SELECT * 
FROM YourTable
WHERE CHARINDEX(@myString , YourColumn) > 0

Sin embargo, en los casos en los que no está utilizando un comodín inicial, se debe evitar el enfoque anterior, ya que no puede usar un índice en YourColumn.

Además, en los casos en que el plan de ejecución óptimo variará de acuerdo con el número de filas coincidentes, las estimaciones pueden ser mejores cuando se utiliza LIKE con la sintaxis de escape de corchetes en comparación con ambos CHARINDEX y el ESCAPE palabra clave.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *