2010-11-18 29 views

回答

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強制將小寫字母改爲大寫字母。結果字符串應該匹配。

+0

這不是JPA兼容(NO轉化的支持),但它會工作中使用Hibernate/ORACLE所以我接受這個答案......希望不要不公平:) – AlfaTeK 2010-11-19 16:52:39

+0

'不公平'或'錯誤'? =)您使用JPA請求了答案,並接受了與JPA不兼容的答案。 – 2016-07-25 00:05:43

8

(...)使用JPA,我該如何強制類似的查詢不區分大小寫且不區分重音?

我的答案是面向JPQL的。對於前一部分,你可以這樣做:

where lower(name) like 'johny%'; 

對於後面的部分,我不知道一個標準的JPQL方式來做到這一點。

最後,改變會話變量NLS_COMPNLS_SORT是IMO的最佳選擇。

-1

你可以使用NLS_UPPER對於不改變會話:

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

NLS_UPPER documentation

+0

這並不能解決不區分重音的問題。 SELECT NLS_UPPER('áçgroe','NLS_SORT = XWEST_EUROPEAN_AI')「Uppercase」FROM DUAL; //返回仍然具有重音符號的GROE – AlfaTeK 2010-11-19 16:46:09

+0

我沒有查看NLS_SORT參數的所有可能值。我想應該有一個消除口音。我會在週末之後看看是否可以添加任何有用的東西。 – 2010-11-19 18:40:05