问题描述
我正在使用一个记录人员姓名的系统。我们需要从名称中删除重音符号以适合旧系统。这样的虚构示例就是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
但我知道
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;
,
除了Translate之外,您还可以使用正则表达式。下一篇可能对您有所帮助。
Finding and removing non ascii characters from an Oracle Varchar2