sql >> Databasteknik >  >> RDS >> Sqlserver

Escape en sträng i SQL Server så att den är säker att använda i LIKE-uttryck

För att undvika specialtecken i ett LIKE-uttryck, sätter du prefixet för dem med ett escape-tecken. Du får välja vilken escape char du vill använda med nyckelordet ESCAPE. (MSDN Ref)

Detta undviker till exempel %-symbolen, med \ som escape-tecken:

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

Om du inte vet vilka tecken som kommer att finnas i din sträng, och du inte vill behandla dem som jokertecken, kan du prefixa alla jokertecken med ett escape-tecken, t.ex.:

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

(Observera att du måste undkomma din escape char också, och se till att det är den inre replace så att du inte undkommer de som lagts till från den andra replace uttalanden). Då kan du använda något i stil med detta:

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

Kom också ihåg att allokera mer utrymme för din @myString-variabel eftersom den blir längre när strängen ersätts.



  1. Storlek på partitionstabell i PostgreSQL 9.0

  2. Konvertera ett strängdatum till datetime i Oracle

  3. Android SQLite jokertecken

  4. TSQL Prova / fånga inom transaktion eller vice versa?