Удалить акценты из строки в Oracle - PullRequest
0 голосов
/ 27 октября 2018

При попытке удалить все акценты из строки в Oracle, используя методы, описанные в этом ответе stackoverflow: как заменить акцентированную букву в столбце varchar2 в oracle Я получаю смешанные результаты.

select CONVERT('JUAN ROMÄN', 'US7ASCII') from dual;

Возвращает исходную строку, но заменяет символы, например, на знак вопроса (вероятно, из-за выбранной кодировки - тесты с разными кодировками привели к разным результатам).

Используя следующую технику:

select utl_raw.cast_to_varchar2(nlssort(NAME_USER, 'nls_sort=binary_ai')) from YOUR_TABLE;

Возвращает полную строку, но также помещает значение NUL в конец строки.

Есть ли набор символов, который можно использовать с испанскими акцентами для получения правильного результата (оригиналстрока с удалением разных акцентов);Есть ли способ избежать значения NUL в технике utl_raw.cast_to_varchar2?

Основываясь на комментариях, замена символа (0), кажется, удаляет значение NUL.Например,

select
   upper(utl_raw.cast_to_varchar2((nlssort('this is áà ñew test','nls_sort=binary_ai')))) as test,
   replace(upper(utl_raw.cast_to_varchar2((nlssort('this is áà ñew test','nls_sort=binary_ai')))),chr(0),'') as test2
from dual;

Если возможно, я хотел бы, однако, иметь более «простое / простое» решение.

Заранее спасибо.

1 Ответ

0 голосов
/ 27 октября 2018

Вы можете использовать TRANSLATE(your_string, from_chars, to_chars) https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions196.htm

Просто поместите все символы с акцентами в строку from_chars и соответствующие им символы замены в to_chars.

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