Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Maskieren Sie eine Zeichenfolge in SQL Server, damit sie sicher im LIKE-Ausdruck verwendet werden kann

Um Sonderzeichen in einem LIKE-Ausdruck zu maskieren, stellen Sie ihnen ein Escape-Zeichen voran. Sie können wählen, welches Escape-Zeichen Sie mit dem Schlüsselwort ESCAPE verwenden möchten. (MSDN-Ref)

Dies maskiert beispielsweise das %-Symbol, wobei \ als Escape-Zeichen verwendet wird:

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

Wenn Sie nicht wissen, welche Zeichen in Ihrer Zeichenfolge enthalten sein werden, und Sie sie nicht als Platzhalter behandeln möchten, können Sie allen Platzhalterzeichen ein Escape-Zeichen voranstellen, z. B.:

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

(Beachten Sie, dass Sie auch Ihr Escape-Zeichen maskieren müssen, und stellen Sie sicher, dass dies das innere replace ist damit Sie die von den anderen replace hinzugefügten nicht entkommen Aussagen). Dann können Sie so etwas verwenden:

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

Denken Sie auch daran, Ihrer @myString-Variablen mehr Platz zuzuweisen, da sie durch die String-Ersetzung länger wird.