当尝试使用此 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 值?
根据评论,替换 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;
如果可能的话,我希望有一个更“直接/更简单”的解决方案。
最佳答案
您可以使用TRANSLATE(your_string, from_chars, to_chars)
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions196.htm
只需将所有带有重音符号的字符放入 from_chars
字符串中,并将其相应的替换字符放入 to_chars
中即可。
关于sql - 从 Oracle 中的字符串中删除重音符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53019511/