You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Teradata中使用strtok函数解析数据时识别异常数据求助

识别PERSON_NAME解析失败的异常数据

问题背景

执行Teradata查询时触发Failure 6706 The string contains an untranslatable character错误,需定位导致姓名拆分逻辑失效的异常PERSON_NAME记录。

原查询语句

SELECT 
       PERSON_NAME
       ,Trim(OReplace(PERSON_NAME,StrTok(PERSON_NAME,' ',1),'')) AS AGENT_LAST_NAME
       ,StrTok(PERSON_NAME,' ',1) AS AGENT_FIRST_NAME
FROM TABLENAME 
WHERE CAST(RECORD_START_TS AS DATE) = '2022-11-01';

期望输出格式

PERSON_NAME                  AGENT_LAST_NAME           AGENT_FIRST_NAME
           Abraham Gomezfitzgerald      Gomezfitzgerald           Abraham
           Adam Tregoning               Tregoning                 Adam
           Ajiel Marino                 Marino                    Ajiel
           Alexander Ford III           Ford III                  Alexander
           Fernanda Garvey Hernandez    Garvey Hernandez          Fernanda

排查与解决步骤

1. 定位异常数据

使用TRANSLATE_CHK函数快速筛选含不可转译字符的记录:

SELECT PERSON_NAME
FROM TABLENAME 
WHERE CAST(RECORD_START_TS AS DATE) = '2022-11-01'
  AND TRANSLATE_CHK(PERSON_NAME USING LATIN_TO_UNICODE) <> 0;

也可通过正则匹配非预期字符:

SELECT PERSON_NAME
FROM TABLENAME 
WHERE CAST(RECORD_START_TS AS DATE) = '2022-11-01'
  AND PERSON_NAME LIKE '%[^a-zA-Z0-9 ]%' ESCAPE '\';

2. 修正查询逻辑

清理不可转译字符后再执行姓名拆分:

SELECT 
       PERSON_NAME
       ,Trim(OReplace(
           TRANSLATE(PERSON_NAME, '', '¬`~!@#$%^&*()_+{}[]|\\:;"''<>,.?/'),
           StrTok(TRANSLATE(PERSON_NAME, '', '¬`~!@#$%^&*()_+{}[]|\\:;"''<>,.?/'),' ',1),
           ''
       )) AS AGENT_LAST_NAME
       ,StrTok(TRANSLATE(PERSON_NAME, '', '¬`~!@#$%^&*()_+{}[]|\\:;"''<>,.?/'),' ',1) AS AGENT_FIRST_NAME
FROM TABLENAME 
WHERE CAST(RECORD_START_TS AS DATE) = '2022-11-01';

内容的提问来源于stack exchange,提问作者Debasis Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:10:28