2011-07-28 1 views
0

나는 다음과 같은 쿼리를했습니다 :HQL 질의 무시 악센트

select u from User u where upper(u.name) like upper(?1) 

이 될 것이다 방법,하지만 u.name?1에 악센트를 무시?

고마워요!

+0

질문을 자세히 작성하십시오 ... 비교에서 악센트 부호가있는 문자를 제거하려고합니까? –

+0

데이터베이스에서 매개 변수와 값 모두가 강조되는 문자를 협의 중에 무시해야합니다. –

+0

데이터베이스 측에서 수행 할 수 있는지 알 수 없습니다. 그것은 Java 측에서 수행 가능해야합니다 (쿼리를 보내기 전에 액센트를 제거하십시오). 그러나 기본 라이브러리 (java.util.text)와 관련된 내용을 찾지 못했습니다. 모든 "강조된"문자를 대응하는 "일반"문자로 매핑해야합니다. 나는 그것이 이미 행해지 지 않은 것에 놀랄 것입니다. – toto2

답변

0

어떤 데이터베이스를 사용하고 있습니까? 대부분의 경우 특정 SQL 명령을 보내서 데이터 정렬을 설정할 수 있습니다.

+0

저는 Postgres를 사용하고 있습니다. –

0

나는 이것을 구현하는 방법을 발견했다. 기본적으로 2 단계가 있습니다 :

  1. 가와
  2. (귀하의 경우 1) 매개 변수를 정상화 정상화 DB

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; 
} 
0

, 난 일부 문자에 악센트를 놓친, 그래서 대체물 방법에 더 많은 문자 추가 :

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; 
}