如何解决在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
(但这不会更改输入字符串)和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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。