Регистр и нечувствительный к акценту оракул сравнения «как» без изменения сеанса на оракуле - PullRequest
3 голосов
/ 16 сентября 2010

Мне нужно иметь возможность делать «похожие» запросы на нескольких языках, чтобы умлаут, a и A обрабатывались одинаково и так далее. У меня 10гр2 оракула и я не могу изменить сессию.

Я пробовал что-то вроде

nls_upper(col_name,'NLS_SORT=BINARY_AI') like nls_upper('%fur%','NLS_SORT=BINARY_AI')

но у меня нет никакой радости. Что бы я ни делал, результат nls_upper, кажется, сохраняет умлауты на U, например.

Можно ли использовать какую-либо функцию или оператор? В идеале, это также преобразовало бы немецкий eszett - тот забавный характер, который выглядит как B - в двойной S.

Спасибо за вашу помощь!

Ответы [ 3 ]

2 голосов
/ 16 сентября 2010

Таким образом, на самом деле кажется, что лучшим решением является преобразование обеих строк в US7ASCII, поскольку это убирает все акценты. Так что я могу сделать:

верхний (конвертировать (col_name, 'US7ASCII')) как верхний (конвертировать ('% okopla%', 'US7ASCII'))

Единственная морщина, которую я обнаружил, это то, что немецкий eszett превращается в? Так что я просто собираюсь посмотреть в моем поисковом слове, и если он содержит забавную букву B, я собираюсь использовать GLS's NLS_UPPER ('große', 'NLS_SORT = XGerman'), иначе я просто сделаю преобразование ASCII. Это немного глупо, но мы должны только охватить английский, французский и немецкий, так что я думаю, что все будет в порядке ..

Спасибо за вашу помощь

1 голос
/ 17 сентября 2010

В соответствии с документацией Oracle вам необходимо указать оба параметра: NLS_COMP = LINGUISTIC и NLS_SORT = XGERMAN_AI, чтобы быть нечувствительными к умлауту и ​​Эсцетту.Я думаю, вы должны заменить Eszetts вручную, с replace().

0 голосов
/ 16 сентября 2010

Соответствует ли это требованиям?

select case when NLS_UPPER ('große', 'NLS_SORT = XGerman') 
                     like '%SS%' then 'YES' else 'no' end match
from dual;

Если нет, вам нужно немного проработать требования.

...