0

我正在开发一个记录人名的系统。我们需要去除名称中的重音符号以适应遗留系统。一个这样的虚构示例是 RÃOUL TÉ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(但这不会改变输入字符串)和AL16UTF16, AL24UTFFSS, AL32UTF8,但是这些转换为汉字。

4

3 回答 3

2

你试过 Translate() 吗?

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

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

例如

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

或以你自己的例子

select translate('JUAN ROMÄN', 'ÃÄ','AA') from dual;
于 2020-08-11T05:04:54.363 回答
0

除了翻译之外,您还可以使用正则表达式。下面的帖子可能对您有所帮助。

从 Oracle Varchar2 中查找和删除非 ascii 字符

于 2020-08-11T06:28:28.847 回答