Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Escape una stringa in SQL Server in modo che sia sicuro da usare nell'espressione LIKE

Per eseguire l'escape di caratteri speciali in un'espressione LIKE, anteponi loro un carattere di escape. Puoi scegliere quale carattere di escape utilizzare con la parola chiave ESCAPE. (Rif. MSDN)

Ad esempio, questo esegue l'escape del simbolo %, utilizzando \ come carattere di escape:

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

Se non sai quali caratteri ci saranno nella tua stringa e non vuoi trattarli come caratteri jolly, puoi anteporre a tutti i caratteri jolly un carattere di escape, ad esempio:

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

(Nota che devi anche sfuggire al tuo carattere di escape e assicurati che sia il replace interno in modo da non sfuggire a quelli aggiunti dall'altro replace dichiarazioni). Quindi puoi usare qualcosa del genere:

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

Ricorda inoltre di allocare più spazio per la tua variabile @myString poiché diventerà più lunga con la sostituzione della stringa.