2010-11-18 4 views

Antwort

4

Primitiv, Sie so etwas wie

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')) 
tun können

Der CONVERT-Befehl reduziert die Zeichen mit Akzent auf die zugeordnete ASCII-Entsprechung, und der UPPER-Befehl setzt Kleinbuchstaben in Großbuchstaben. Die resultierenden Zeichenfolgen sollten aufeinander abgestimmt sein.

+0

Dies ist nicht JPA kompatibel (kein Konvertit Unterstützung), aber es funktioniert mit Hibernate/oracle so ich dies akzeptieren Antwort ... hoffe, nicht unfair zu sein :) – AlfaTeK

+0

'Unfair' oder falsch? =) Sie haben mit JPA nach einer Antwort gefragt und eine akzeptiert, die nicht JPA-kompatibel ist. –

8

(...) mit JPA, wie kann ich erzwingen, dass eine ähnliche Abfrage zwischen Groß- und Kleinschreibung und akzentunempfindlich ist?

Meine Antwort wird JPQL-orientiert sein. Für den ehemaligen Teil könnte man tun:

where lower(name) like 'johny%'; 

für den späteren Teil, bin ich von einer Standard-JPQL Weise nicht bewusst, es zu tun.

Am Ende ist die Änderung der Sitzungsvariablen NLS_COMP und NLS_SORT IMO die beste Option.

-1

Sie NLS_UPPER für die ohne Änderung der Sitzung verwenden:

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

NLS_UPPER documentation

+0

Das löst das akzentunempfindliche Problem nicht. SELECT NLS_UPPER ('áçgroe', 'NLS_SORT = XWEST_EUROPEAN_AI') "Großbuchstaben" FROM DUAL; // gibt ÁÇGROE zurück, das noch Akzente hat – AlfaTeK

+0

Ich habe nicht alle möglichen Werte des Parameters NLS_SORT untersucht. Ich denke, es sollte einen geben, der die Akzente beseitigt. Ich werde sehen, ob ich nach meinem Wochenende etwas Nützliches hinzufügen kann. –

Verwandte Themen