2010-11-18 4 views

Odpowiedz

4

grubsza, można zrobić coś jak

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')) 

Konwersja redukuje znaki akcentowane do zmapowanego odpowiednika ASCII, a UPPER wymusza pisanie małymi literami na wielkie litery. Wynikowe ciągi powinny być możliwe do dopasowania.

+0

To nie jest zgodny JPA (brak wsparcia konwersji), ale to będzie działać przy użyciu hibernacji/oracle, więc jestem z zaakceptowaniem tego odpowiedź ... mam nadzieję, że nie będzie niesprawiedliwe :) – AlfaTeK

+0

"Nieuczciwe" lub źle? =) Pytasz o odpowiedź przy użyciu WZP i zaakceptował taki, który nie jest zgodny z JPA. –

8

(...) przy użyciu JPA, jak mogę wymusić, aby podobne zapytanie było niewrażliwe na wielkość liter i bez uwzględniania akcentów?

Moja odpowiedź będzie zorientowana na JPQL. Dla byłej części, można zrobić:

where lower(name) like 'johny%'; 

do dalszej części, nie jestem świadomy standardowej JPQL sposób to zrobić.

Na koniec zmiana zmiennych sesji NLS_COMP i NLS_SORT jest IMO najlepszą opcją.

-1

Można użyć NLS_UPPER za to bez zmieniania sesji:

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

NLS_UPPER documentation

+0

To nie rozwiązuje problemu niewrażliwego na akcent. WYBIERZ NLS_UPPER ('áçgroe', 'NLS_SORT = XWEST_EUROPEAN_AI') "Wielkie litery" OD DUAL; // zwraca ÁÇGROE, który wciąż ma akcenty. – AlfaTeK

+0

Nie szukałem wszystkich możliwych wartości parametru NLS_SORT. Chyba powinien być taki, który eliminuje akcenty. Zobaczę, czy mogę dodać coś użytecznego po moim weekendzie. –

Powiązane problemy