【问题标题】:Remove accents from string in Oracle从 Oracle 中的字符串中删除重音符号
【发布时间】: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))去掉吗?
  • 显示没有问题。这是一个特定的要求。

标签: sql oracle


【解决方案1】:

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

只需将所有带重音符号的字符放在from_chars 字符串中,并将它们对应的替换字符放在to_chars 中。

【讨论】:

    猜你喜欢
    • 2012-01-21
    • 2015-08-30
    • 2010-09-19
    • 2012-12-10
    • 2014-12-11
    • 2022-01-03
    相关资源
    最近更新 更多