Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Échappez une chaîne dans SQL Server afin qu'elle puisse être utilisée en toute sécurité dans l'expression LIKE

Pour échapper les caractères spéciaux dans une expression LIKE, vous les préfixez avec un caractère d'échappement. Vous pouvez choisir le caractère d'échappement à utiliser avec le mot-clé ESCAPE. (Réf MSDN)

Par exemple, ceci échappe le symbole %, en utilisant \ comme caractère d'échappement :

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

Si vous ne savez pas quels caractères seront dans votre chaîne et que vous ne voulez pas les traiter comme des caractères génériques, vous pouvez préfixer tous les caractères génériques avec un caractère d'échappement, par exemple :

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

(Notez que vous devez également échapper votre caractère d'échappement et assurez-vous qu'il s'agit du replace interne pour ne pas échapper à ceux ajoutés par l'autre replace déclarations). Ensuite, vous pouvez utiliser quelque chose comme ceci :

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

N'oubliez pas également d'allouer plus d'espace pour votre variable @myString car elle deviendra plus longue avec le remplacement de la chaîne.