【发布时间】:2019-03-31 20:25:14
【问题描述】:
当尝试使用此 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 值?
基于 cmets,替换 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;
如果可能的话,我希望有一个更“直截了当/更简单”的解决方案。
【问题讨论】:
-
为什么要这样做?字符显示有问题吗?
-
用你的第二种方法,你不能把nul(
chr(0))去掉吗? -
显示没有问题。这是一个特定的要求。