在Oracle SQL中剥离非英文字符 整理 CONVERT()

问题描述

我正在使用一个记录人员姓名的系统。我们需要从名称删除重音符号以适合旧系统。这样的虚构示例就是RÃOULTÉLITINO,我们需要将Ã转换为A,将É转换为E,依此类推。 我很难这么做。 信息

SELECT *
  FROM v$nls_parameters
WHERE parameter LIKE '%CHaraCTERSET'

给予

**Parameter**:INLS_CHaraCTERSET 
**Value**: AL32UTF8
   and
**Parameter**: NLS_NCHAR_CHaraCTERSET     **Value**: AL16UTF16|

我尝试过的:

整理

select 'RÃOUL TÉLITINO' collate sql_latin1_General_Cp1251_CS_AS

但我知道

ORA-12746:无法识别的归类名称sql_latin1_GENERAL_CP1251_CS_AS”

CONVERT()

第一次尝试

select CONVERT('JUAN ROMÄN','US7ASCII') from dual;

给出理想的'JUAN ROMAN',但

select CONVERT('RÃOUL TÉRK','US7ASCII') from dual;

错过了Ã,即:R?OUL TERK

第二次尝试

我尝试过的其他参数是AL16UTF16(但这不会更改输入字符串)和AL16UTF16AL24UTFFSSAL32UTF8,但是它们会转换为中文字符。

解决方法

您尝试过Translate()吗?

translate(text,'ÂÃÄÀÁÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝŸàáâãäåçèéêëìíîïñòóôõöøùúûüýÿ','AAAAAACEEEEIIIINOOOOOOUUUUYYaaaaaaceeeeiiiinoooooouuuuyy')
,

尝试使用translate函数,该函数通过一次替换单个字符来将字符串中的字符序列替换为另一组字符。

例如

select translate(WORD,'ÃÉÄ','ΑΕA') from dual

或以您自己的示例

select translate('JUAN ROMÄN','ÃÄ','AA') from dual;
,

除了Translate之外,您还可以使用正则表达式。下一篇可能对您有所帮助。

Finding and removing non ascii characters from an Oracle Varchar2