2009-08-17 22 views
5

Bir SQL Server veritabanındaki bir sütuna% LIKE% araması yapmanın mümkün olup olmadığını, ancak sütundaki herhangi bir özel karakteri yok saymayı bilen var mı?SQL veritabanında özel karakterler yoksayılırken arama sütunu

Yani, örneğin bir sütun "şarkıları" olarak adlandırılan ve onlar

Gemi ... Aşağıdaki


Siyah Veya Beyaz

No Sleep 'Brooklyn

kadar içeriyorsa Şarkı

Papa Do not Preach


Eğer kullanıcı "brooklyn'e kadar zahmetsiz" arama yaparsa, o zaman kesme işareti eklemeyi unutmuş olsalar bile bir eşleşme yapmak isterim. "SOUL" için arama yaparsanız 4. sıraya dönmesini de isterim. Eminim şu fikri alırsınız ...

Herhangi bir yardım gerçekten takdir edilecektir.

cevap

8

Tam Metin Dizini kullanmaya bakardım ve daha sonra aramanızı yapmak için FREETEXT ve CONTAINS'in gücünü kullanabilirsiniz.

DÜZENLEME: Yine de Tam Metin Dizini aramasını incelemek için arama yapmayı düşünmekteyim, ancak başka bir cevaptan devam etmek için REPLACE kullanarak bir seçenek budur.

SELECT 
    Artist, 
    Title 
FROM 
    Songs 
WHERE 
    REPLACE(REPLACE(REPLACE(Artist, '#',''), '*', ''), '"', '') LIKE '%Keywords%' 
+0

Dang, bana onu döv. Bu gerçekten gitmenin yolu gibi geliyor, IMO. Aslında şu anda benzer bir durumla karşı karşıyayım ve tam metin aramaya geçmek üzereyim. –

+0

Ne yazık ki, bunun için kendi sorgularımızı yazma olasılığını araştırmamın nedeni şu anda tam metin indeksleme kullanıyoruz ve müşteri çok fazla alakasız sonuç döndürdüğü için bunu sevmiyor! – jonhobbs

+0

@Jon, buna baktınız mı? http://msdn.microsoft.com/en-us/library/cc879245.aspx –

0

TRANSLATE, UPPER, and TRIM'un bir kombinasyonunu kullanın.

+0

SQL Server'da Çevir? –

+0

Sadece bu işlevler için arama yaptım, ancak herhangi bir bilgi bulamıyorum. – jonhobbs

+0

SQL Server eşdeğerleri UPPER, LTRIM, RTRIM. Bir TRANSLATE işlevi yoktur, ancak her bir özel karakteriniz için birden çok REPLACE işlevi kullanabilirsiniz. –

1

Kaldırılacak çeşitli karakterleriniz olacaktır. Tek tırnak, çift tırnak, tire, nokta, virgül, vb.

Düzenli ifadeleri nerede kullandığınız maddede kullanabilir ve temiz değerde bir eşleşme yapabilirsiniz. Read more about regex within SQL here.

SOUL .. için 4. satırı döndürmek istediğiniz sanatla ilgili olarak, şarkıları etiketlemek için bir veri yapısına ihtiyacınız olacak ve eşleşme için etiketlerde arama yapmanız gerekecektir. Korkarım ki, veri yapınız için daha fazla ayrıntıya ihtiyacımız olacak.

+0

Regex'leri kullanmaktan çok kötüyüm, ancak özel karakterleri kaldıran satırda bir regex bulabilirim. Teşekkürler – jonhobbs