Как сделать подобное без учета регистра и без учета акцента в Oracle 10gR2 и JPA? - PullRequest
10 голосов
/ 18 ноября 2010

В проекте J2EE, использующем JPA, как я могу заставить подобный запрос быть без учета регистра и без акцента?

Я знаю об изменении переменных сеанса NLS_COMP и NLS_SORT, но мне интересно, есть ли другойтрюк, чтобы сделать это в самом запросе, без изменения переменных сеанса

Ответы [ 3 ]

8 голосов
/ 19 ноября 2010

(...) с использованием JPA, как я могу заставить подобный запрос быть без учета регистра и без акцента?

Мой ответ будет ориентирован на JPQL. Для первой части вы можете сделать:

where lower(name) like 'johny%';

Для более поздней части я не знаю стандартного способа JPQL сделать это.

В конце, изменение переменных сеанса NLS_COMP и NLS_SORT является IMO лучшим вариантом.

4 голосов
/ 19 ноября 2010

Грубо говоря, вы можете сделать что-то вроде

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 голосов
/ 19 ноября 2010

Вы можете использовать NLS_UPPER для этого без изменения сеанса:

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

Документация NLS_UPPER

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...