Teradata 16.20中识别替换不可转译字符的内置函数求助
Teradata 16.20 SET LATIN表特殊字符替换报错解决方案
在Teradata 16.20版本中,当表采用SET LATIN字符集定义时,执行REGEXP_REPLACE处理含不可转译特殊字符的字符串会触发6706错误:
执行语句:
SELECT REGEXP_REPLACE('=H�4l3B7' ,'[^0-9a-zA-Z]' ,' ');
错误提示:
Failed [6706 : HY000] The string contains an untranslatable character
尝试以下语句仍无法解决问题:
SELECT REGEXP_REPLACE('=H�4l3B7' ,'[^0-9a-zA-Z]' ,' '); select regexp_replace('=H�4l3B7', '[^0-9a-z]', '', 1, 0, 'i')
可行的Teradata内置函数解决方案
方案1:使用TRANSLATE+OTRANSLATE直接过滤(推荐)
利用OTRANSLATE提取所有合法字符,再用TRANSLATE移除其余字符,无需字符集转换:
SELECT TRANSLATE('=H�4l3B7', '', OTRANSLATE('=H�4l3B7', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'));
该语句会保留字符串中的数字和大小写字母,自动移除包括不可转译字符在内的所有其他字符。
方案2:转换字符集后用REGEXP_REPLACE处理
先将字符串转换为UNICODE字符集(可兼容特殊字符),执行正则替换后再转回LATIN:
SELECT CAST(REGEXP_REPLACE(CAST('=H�4l3B7' AS VARCHAR(100) CHARACTER SET UNICODE), '[^0-9a-zA-Z]', ' ') AS VARCHAR(100) CHARACTER SET LATIN);
通过字符集转换规避LATIN对特殊字符的转译限制,完成替换后还原原字符集。
内容的提问来源于stack exchange,提问作者srinivascnu
相关产品推荐
相关产品推荐

