我正在开发一个记录人名的系统。我们需要去掉名字中的重音符号,以适应遗留系统。其中一个虚构的例子是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
,但它们可以转换为中文字符。
您尝试过Translate((吗?
translate(text,
'ÂÃÄÀÁÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝŸàáâãäåçèéêëìíîïñòóôõöøùúûüýÿ',
'AAAAAACEEEEIIIINOOOOOOUUUUYYaaaaaaceeeeiiiinoooooouuuuyy')
尝试translate函数,它通过一次替换一个字符,将字符串中的一个字符序列替换为另一组字符。
例如
select translate(WORD,'ÃÉÄ','ΑΕA') from dual
或者你自己的
select translate('JUAN ROMÄN', 'ÃÄ','AA') from dual;
除了翻译,您还可以使用正则表达式。下面的帖子可能对你有帮助。
从Oracle Varchar2 中查找和删除非ascii字符