sql - 从 Oracle 中的字符串中删除重音符号

标签 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 值?

根据评论,替换 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/

相关文章:

mysql - 在 SQL 中存储 bool 选项

php - 如何显示内部连接表中的必填字段

ruby-on-rails - 如何运行sqlplus centOS?

php - Oracle 在存储单个字符时使用多少字节?

sql - ORA-12801 : error signaled in parallel query server P004 and ORA-01555: snapshot too old

sql - 大型 SQL 查询填充 tempdb 需要优化

Java 检测 Oracle 数据库宕机错误代码

oracle - PL/SQL 中无法选择 count(*)

sql - T-SQL 的表级差异和同步过程

java - 如何在 MyBatis 中调用返回 Oracle 记录类型的 Oracle 函数