我有以下查詢:HQL查詢忽略口音
select u from User u where upper(u.name) like upper(?1)
如何做到這一點的,但忽視了u.name
和?1
的口音?
謝謝你們!
我有以下查詢:HQL查詢忽略口音
select u from User u where upper(u.name) like upper(?1)
如何做到這一點的,但忽視了u.name
和?1
的口音?
謝謝你們!
您使用的數據庫是?在其中的大多數中,您可以發送特定的SQL命令來設置排序規則。
我正在使用Postgres。 –
我找到了一種方法來實現這一點。基本上有兩個步驟:
例
public User getByName(String paramName) {
.....
}
原始HQL查詢數據:
String queryString = "select u from User u where u.name : =paramName";
新查詢:
paramName = normalizer(paramName);
String queryString = "select u from User u where " + replacer(u.name) +" : =paramName";
而且2種方法:
public static String normalizer(String s) {
return Normalizer.normalize(s, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");
}
public String replacer(String param) {
String t1 = "àâäçéèëêùûüôöïî";
String t2 = "aaaceeeeuuuooii";
String s = param;
for (int i = 0; i < t1.length(); i++) {
s = "replace(" + s + ",'" + t1.charAt(i) + "','" + t2.charAt(i) + "')";
}
return s;
}
葡萄牙語,我錯過在某些字符的修飾,所以我說在替換器方法的更多字符:
public String replacer(String param) {
String t1 = "áãàâäçéèëêùûüúóôöïîíÁÀÂÄÃÇÉÈËÊÙÛÜÚÓÔÖÏÎÍ";
String t2 = "aaaaaceeeeuuuuoooiiiAAAAÃCEEEEUUUUOOOIII";
String s = param;
for (int i = 0; i < t1.length(); i++) {
s = "replace(" + s + ",'" + t1.charAt(i) + "','" + t2.charAt(i) + "')";
}
return s;
}
請詳細說明你的問題......你是否試圖從比較中刪除重音字符? –
我希望在諮詢過程中忽略重音字符,數據庫中的參數和值。 –
我不知道它是否可以在數據庫端完成。它應該可以在Java端執行(在提交查詢之前刪除重音符號),但是我在基礎庫(java.util.text)中找不到任何相關內容。您需要使用相應的「簡單」字符構建所有重音字符的地圖。我很驚訝,它還沒有完成。 – toto2