删除Oracle中字符串的重音符号

v9tzhpje  于 2023-05-22  发布在  Oracle
关注(0)|答案(2)|浏览(197)

当尝试使用此stackoverflow回答中描述的技术从Oracle中的字符串中删除所有重音符号时:how replace accented letter in a varchar2 column in 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值。
是否有一个字符集,我可以使用西班牙口音,以获得正确的结果(原始字符串与不同的口音删除);有没有办法避免utl_raw.cast_to_varchar2技术中的NUL值?
根据注解,replace char(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;

如果可能的话,我会有一个更“直接/更简单”的解决方案。

u0sqgete

u0sqgete1#

您可以使用TRANSLATE(your_string, from_chars, to_chars)https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions196.htm
只需将所有带有重音符号的字符放在from_chars字符串中,并将其相应的替换字符放在to_chars中。

7z5jn7bk

7z5jn7bk2#

我在下面的页面上找到了这个:https://blogs.oracle.com/sql/post/how-to-do-case-insensitive-and-accent-insensitive-search-in-oracle-database

select substr ( athlete_name, instr ( athlete_name, ', ' ) + 2 ) given_names, athlete_name from olym_athletes where athlete_name like '%helene%' Collate binary_ai order by given_names;

使用排序binary_ai,过滤器没有大写和小写,还有口音,我希望你能提供另一个例子:

SELECT id, name, surname, salary FROM EMPLOYEES WHERE SURNAME LIKE '%PeRéZ%' Collate binary_ai ;

相关问题