2008-11-17 9 views
5

kullanarak GİBİ yan tümcesinde çizgi kaçmak için bir joker davranmazsan:yapılandır hazırda Özellikle bir alt çizgi için bakmak gerekir bir alt çizgi içeren bir LIKE yan tümcesine sahip bir SQL SELECT sorgusu vardır SQL Server lehçesi

SELECT * FROM my_table WHERE name LIKE '_H9%'; 

Beklediğim gibi çalışabilmesi için gerçek yan tümceleri '[_] H9%' olarak değiştirebileceğimi anlıyorum, ancak sorun, bu maddenin Hazırda bekletme tarafından oluşturulduğudur.

Tüm sorgulardaki tüm alt çizgilerden bu şekilde çıkmak için Hazırda bekletme'yi yapılandırmanın bir yolu var mı? Başarısız, SQL Server (2008 benim durumumda) alt simge olarak joker karakterler olarak yapılandırmak için bir yolu var mı?

+0

Hangi API Hazırda (yani Kriterler Sorgu, HQL vs.) kullanıyorsunuz? Kodun/hazırda bekletme yapılandırmasının bir parçasını sağlamanız yararlı olacaktır. – FoxyBOA

cevap

5

Sorguyu oluşturmak için Kriterler kullanıyorsanız, 'Character escapeChar' ifadesini alan korumalı kuruculardan birini kullanarak org.hibernate.criterion.LikeExpression alt sınıflarını kendi ifadelerinizi oluşturabilir ve sizin için değer. '!' Herhangi bir arama dizeleri olmayacak bilinen bir değer (herhangi sanırım, gibi seçebilirsiniz) 'dir, sadece yapabilirsiniz:

public class EscapingLikeExpression extends LikeExpression { 
    public EscapingLikeExpression(String propertyName, String value) { 
     super(propertyName, escapeString(value), '!', false); 
    } 

    static String escapeString(String inputString) { 
    inputString = inputString.replace("_", "!_"); 
    return inputString; 
    } 

} 

böyle karakterler (yani görünmez olup olmadığını hazır bilgi olarak arama değeri) sonra escapeString ilk satırı olarak aşağıdakileri ekleyin() onları da kaçmak için:

inputString = inputString.replace("!", "!!"); 
0

Neden değerde bir dize değiştirme yapamazsınız? Bu nasıl kullanılmaz bir çözümdür?

İlgili konular