在使用JPA的J2EE项目中,如何强制类似查询不区分大小写并且不区分重音?
我知道更改会话变量NLS_COMP和NLS_SORT,但我想知道在查询本身是否还有其他技巧可以做到这一点,而不更改会话变量
答案 0 :(得分:8)
(...)使用JPA,如何强制类似查询不区分大小写并且不区分重音?
我的回答是面向JPQL的。对于前一部分,您可以这样做:
where lower(name) like 'johny%';
对于后面的部分,我不知道采用标准的JPQL方法。
最后,改变会话变量NLS_COMP
和NLS_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%';