您的诊断是正确的,所以首先,您可能需要检查会话字符集(它是连接定义的一部分)。
如果是 ASCII 将其更改为 UTF8,您将能够看到原始字符而不是替代字符。
如果字符确实是数据的一部分,而不仅仅是编码翻译问题的指示:
替代字符 AKA SUB(DEC:26 HEX:1A)在 Teradata 中非常独特。
你不能直接使用它-
select '�';
-- [6706] The string contains an untranslatable character.
select '1A'XC;
-- [6706] The string contains an untranslatable character.
如果您使用的是 14.0 或更高版本,您可以使用 CHR 函数生成它:
select chr(26);
如果您低于 14.0 版,您可以像这样生成它:
select translate (_unicode '05D0'XC using unicode_to_latin with error);
生成角色后,您现在可以将其与 REPLACE 或 OTRANSLATE
一起使用
create multiset table t (i int,txt varchar(100) character set latin) unique primary index (i);
insert into t (i,txt) values (1,translate ('Hello שלום world עולם' using unicode_to_latin with error));
select * from t;
-- Hello ���� world ����
select otranslate (txt,chr(26),'') from t;
-- Hello world
select otranslate (txt,translate (_unicode '05D0'XC using unicode_to_latin with error),'') from t;
-- Hello world
顺便说一句,OTRANSLATE 和 OREPLACE 有 2 个版本:
-
syslib 下的函数适用于 LATIN。
-
TD_SYSFNLIB 下的函数适用于 UNICODE。