在Oracle中从字符串中删除重音符号

时间:2018-10-27 07:00:36

标签: sql oracle

当尝试使用以下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;

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

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用TRANSLATE(your_string, from_chars, to_chars) https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions196.htm

只需将所有带有重音符的字符放入from_chars字符串中,并将其对应的替换字符放入to_chars中。