una parte left extraer charindex caracteres cadena sql-server tsql stored-procedures sql-like

parte - Escape de una cadena en SQL Server para que sea seguro usarlo en la expresión LIKE



sql server split string delimiter (5)

¿Desea buscar cadenas que incluyan un carácter de escape? Por ejemplo, quieres esto:

select * from table where myfield like ''%10%%''.

¿Dónde quieres buscar todos los campos con 10%? Si ese es el caso, entonces puede usar la cláusula ESCAPE para especificar un carácter de escape y escapar del carácter comodín.

select * from table where myfield like ''%10!%%'' ESCAPE ''!''

¿Cómo escapo de una cadena en el procedimiento almacenado de SQL Server para que sea seguro usarlo en la expresión LIKE ?

Supongamos que tengo una variable NVARCHAR así:

declare @myString NVARCHAR(100);

Y quiero usarlo en una expresión LIKE :

... WHERE ... LIKE ''%'' + @myString + ''%'';

¿Cómo puedo escapar de la cadena (más específicamente, los caracteres que son significativos para LIKE la coincidencia de patrones, por ejemplo, % o ? ) En T-SQL, para que sea seguro usar de esta manera?

Por ejemplo, dado:

@myString = ''aa%bb''

Yo quiero:

WHERE ... LIKE ''%'' + @somehowEscapedMyString + ''%''

para que coincida con ''aa%bb'' , ''caa%bbc'' pero no con ''aaxbb'' o ''caaxbb'' .


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

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

En los casos en que no esté utilizando un comodín principal, debe evitarse 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 cuando se compara con CHARINDEX y la palabra clave ESCAPE .


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

Por ejemplo, esto escapa al símbolo%, usando / como el 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 ponerle un prefijo a todos los caracteres comodín con un carácter de escape, por ejemplo:

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

(Tenga en cuenta que también tiene que escapar de su char de escape, y asegúrese de que ese sea el replace interno para que no escape los que se agregaron de las otras declaraciones de replace ). Entonces puedes usar algo como esto:

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

Recuerde también asignar más espacio para su variable @myString, ya que se alargará con el reemplazo de cadena.


Tuve un problema similar (usando NHibernate, por lo que la palabra clave ESCAPE hubiera sido muy difícil) y lo resolví utilizando los caracteres de corchetes. Entonces tu muestra se convertiría

WHERE ... LIKE ''%aa[%]bb%''

Si necesita una 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