在使用JPA的J2EE項目中,如何強制類似的查詢不區分大小寫且不區分變音?如何在Oracle 10gR2和JPA中執行類似於不區分大小寫和不區分變音的操作?
我知道改變會話變量NLS_COMP和NLS_SORT,但我不知道是否有另一種伎倆在查詢本身要做到這一點,在不改變會話變量
在使用JPA的J2EE項目中,如何強制類似的查詢不區分大小寫且不區分變音?如何在Oracle 10gR2和JPA中執行類似於不區分大小寫和不區分變音的操作?
我知道改變會話變量NLS_COMP和NLS_SORT,但我不知道是否有另一種伎倆在查詢本身要做到這一點,在不改變會話變量
好聽的,你可以這樣做
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強制將小寫字母改爲大寫字母。結果字符串應該匹配。
(...)使用JPA,我該如何強制類似的查詢不區分大小寫且不區分重音?
我的答案是面向JPQL的。對於前一部分,你可以這樣做:
where lower(name) like 'johny%';
對於後面的部分,我不知道一個標準的JPQL方式來做到這一點。
最後,改變會話變量NLS_COMP
和NLS_SORT
是IMO的最佳選擇。
你可以使用NLS_UPPER對於不改變會話:
select 1
from dual
where nls_upper('große', 'NLS_SORT = XGerman') like '%OSSE%';
這並不能解決不區分重音的問題。 SELECT NLS_UPPER('áçgroe','NLS_SORT = XWEST_EUROPEAN_AI')「Uppercase」FROM DUAL; //返回仍然具有重音符號的GROE – AlfaTeK 2010-11-19 16:46:09
我沒有查看NLS_SORT參數的所有可能值。我想應該有一個消除口音。我會在週末之後看看是否可以添加任何有用的東西。 – 2010-11-19 18:40:05
這不是JPA兼容(NO轉化的支持),但它會工作中使用Hibernate/ORACLE所以我接受這個答案......希望不要不公平:) – AlfaTeK 2010-11-19 16:52:39
'不公平'或'錯誤'? =)您使用JPA請求了答案,並接受了與JPA不兼容的答案。 – 2016-07-25 00:05:43