나는 다음과 같은 쿼리를했습니다 :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를 사용하고 있습니다. –
나는 이것을 구현하는 방법을 발견했다. 기본적으로 2 단계가 있습니다 :
가예
public User getByName(String paramName) {
.....
}
원래 HQL 쿼리의 데이터가 :
String queryString = "select u from User u where u.name : =paramName";
,210
새 쿼리 :
paramName = normalizer(paramName);
String queryString = "select u from User u where " + replacer(u.name) +" : =paramName";
그리고이 개 방법 : 포르투갈어
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