如何在Oracle 10gR2和JPA中对区分大小写和重音不敏感?

时间:2010-11-18 19:35:50

标签: java oracle jpa

在使用JPA的J2EE项目中,如何强制类似查询不区分大小写并且不区分重音?

我知道更改会话变量NLS_COMP和NLS_SORT,但我想知道在查询本身是否还有其他技巧可以做到这一点,而不更改会话变量

3 个答案:

答案 0 :(得分:8)

  

(...)使用JPA,如何强制类似查询不区分大小写并且不区分重音?

我的回答是面向JPQL的。对于前一部分,您可以这样做:

where lower(name) like 'johny%';

对于后面的部分,我不知道采用标准的JPQL方法。

最后,改变会话变量NLS_COMPNLS_SORT是IMO的最佳选择。

答案 1 :(得分:4)

粗略地说,你可以做类似

的事情
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将小写字母强制为大写。结果字符串应该是匹配的。

答案 2 :(得分:-1)

您可以在不改变会话的情况下使用NLS_UPPER:

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

NLS_UPPER documentation