Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Escape de uma string no SQL Server para que seja seguro usar na expressão LIKE


Para escapar caracteres especiais em uma expressão LIKE, você prefixa-os com um caractere de escape. Você pode escolher qual caractere de escape usar com a palavra-chave ESCAPE. (Referência MSDN)

Por exemplo, isso escapa do símbolo %, usando \ como caractere de escape:
select * from table where myfield like '%15\% off%' ESCAPE '\'

Se você não sabe quais caracteres estarão em sua string e não deseja tratá-los como curingas, você pode prefixar todos os caracteres curinga com um caractere de escape, por exemplo:
set @myString = replace( 
                replace( 
                replace( 
                replace( @myString
                ,    '\', '\\' )
                ,    '%', '\%' )
                ,    '_', '\_' )
                ,    '[', '\[' )

(Observe que você também precisa escapar do seu caractere de escape e certifique-se de que seja o replace interno para que você não escape dos adicionados do outro replace declarações). Então você pode usar algo assim:
select * from table where myfield like '%' + @myString + '%' ESCAPE '\'

Lembre-se também de alocar mais espaço para sua variável @myString, pois ela ficará mais longa com a substituição da string.