programing

Oracle 10gR2 및 JPA에서 유사한 대소문자 구분 및 악센트 구분을 수행하는 방법은 무엇입니까?

css3 2023. 10. 22. 20:21

Oracle 10gR2 및 JPA에서 유사한 대소문자 구분 및 악센트 구분을 수행하는 방법은 무엇입니까?

J2EE 프로젝트에서 JPA를 사용하여 유사한 쿼리를 대소문자 구분 없이 악센트 구분 없이 강제할 수 있는 방법은 무엇입니까?

세션 변수 NLS_COMP 및 NLS_SORT 변경에 대해서는 알고 있지만 세션 변수를 변경하지 않고 쿼리 자체에서 이 작업을 수행할 수 있는 다른 방법이 있는지 궁금합니다.

(...) JPA를 사용하여 유사한 쿼리를 대소문자 구분 없이 악센트 구분 없이 강제할 수 있는 방법은 무엇입니까?

저의 대답은 JPQL을 지향할 것입니다.앞 부분에서는 다음과 같은 작업을 수행할 수 있습니다.

where lower(name) like 'johny%';

나중 부분은 표준 JPQL 방식을 잘 모릅니다.

마지막으로 세션 변수 변경NLS_COMP그리고.NLS_SORTIMO가 최선의 선택입니다.

조잡하게도, 당신은 다음과 같은 것을 할 수 있습니다.

select  upper(convert('This is a têst','US7ASCII')),
        upper(convert('THIS is A test','US7ASCII'))
from dual;

select  1 from dual 
where upper(convert('This is a têst','US7ASCII')) =
             upper(convert('THIS is A test','US7ASCII'))

CONVERT는 악센트가 있는 문자를 매핑된 ASCII 등가로 줄이고, UPPER는 소문자를 대문자로 강제합니다.결과 문자열은 일치해야 합니다.

세션을 변경하지 않고 NLS_UPPER를 사용할 수 있습니다.

select 1
from dual
where nls_upper('große', 'NLS_SORT = XGerman') like '%OSSE%';

NLS_UPER 문서

언급URL : https://stackoverflow.com/questions/4218780/how-to-do-a-like-case-insensitive-and-accent-insensitive-in-oracle-10gr2-and-jpa