Kasa GİBİ bir ifade kullanmak için, SQL Server bir dize kaçış | Netgez.com
SORU
3 Kasım 2008, PAZARTESİ


Kasa GİBİ bir ifade kullanmak için, SQL Server bir dize kaçış

Ne kadar güvenli LIKE ifade kullanmak için SQL Server depolanmış yordam bir dize kurtulurum.

Öyle gibi: NVARCHAR bir değişken var sanırım

declare @myString NVARCHAR(100);

Ve* *10 bir ifade kullanmak istiyorum:

... WHERE ... LIKE '%'   @myString   '%';

Nasıl escape string (daha spesifik olarak, karakterleri bu anlamlı LIKE desen eşleştirme, örneğin % ?) T-SQL, bu yüzden güvenli kullanmak için bu şekilde?

Örneğin, belirli:

@myString = 'aa»'

Ä°stiyorum:

WHERE ... LIKE '%'   @somehowEscapedMyString   '%'

'aa»', 'caa»c' 'aaxbb' 'caaxbb' maç için.

CEVAP
3 Kasım 2008, PAZARTESİ


Özel karakterler kaçmak GİBİ bir ifade içinde bir kaçış karakteri ile onları önek. Çıkış anahtar ile kullanmak için char hangi seçim için olsun. (MSDN Ref)

Örneğin bu % sembolü, kaçış char olarak kullanarak \ kaçar:

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

Eğer karakter dizesi olacaktır ve joker olarak kabul etmek istemediğiniz şey bilmiyorsun bile, bir kaçış char ile tüm joker karakterler, örneğin önek:

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

(Escape char çok kurtulacak olanlar replace diğer tablolardan ekledi kaçış) yok replace iç emin olun unutmayın. O zaman bu gibi bir şey kullanabilirsiniz:

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

Ayrıca dize değiştirme ile daha uzun olacak gibi @hoşgeldiniz değişken için daha fazla alan ayırmak için hatırlıyorum.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • Erica Griffin

    Erica Griffi

    8 HAZÄ°RAN 2009
  • Ralph Phillips

    Ralph Philli

    5 Aralık 2006
  • Theodore Leaf

    Theodore Lea

    29 AÄžUSTOS 2006