Informatica日期转换报错求助:无效日期[19/8/2013]行被跳过
问题排查与解决
错误根源
你的转换逻辑完全搞反,且格式匹配错误:
- 源平面文件的日期是字符串类型,格式为
DD/MM/YYYY(如19/08/2013、19/8/2013),先执行TO_CHAR(A)毫无意义——如果A被工具识别为日期,TO_CHAR会用默认格式输出,和后续解析需要的DD-MON-YY不匹配;如果A是字符串,TO_CHAR直接处理字符串会引发格式混乱。 - 后续用
TO_DATE(V1,'DD-MON-YY')解析时,V1的内容是源日期字符串(或错误转换后的字符串),根本不符合DD-MON-YY格式(比如19/08/2013和19-AUG-13完全是两种格式),所以必然报错。
正确转换步骤
情况1:直接插入Oracle日期列
Oracle日期列不存储显示格式,只存储日期数值,显示格式由会话的NLS_DATE_FORMAT控制。你只需把源字符串转成日期类型即可:
-- 将源字符串转为日期类型,匹配源格式DD/MM/YYYY(支持单数字日/月) O1 = TO_DATE(A, 'DD/MM/YYYY')
这个结果可直接插入Oracle日期列,Oracle会自动处理存储;若查询时需要显示为11-AUG-13格式,只需设置会话格式或用TO_CHAR(O1, 'DD-MON-RR')查询。
情况2:需要生成DD-MON-YY格式的字符串(若目标是字符串列)
如果目标列是字符串类型,需先转日期再转成指定格式的字符串:
-- 先转日期,再转成目标格式字符串 O1 = TO_CHAR(TO_DATE(A, 'DD/MM/YYYY'), 'DD-MON-RR')
用RR代替YY处理年份,可避免2000年问题。
额外注意事项
- 排查源数据中是否存在无效日期(如
32/01/2013这类不存在的日期),这类数据会触发跳过错误。 - 确认ETL工具将源列A识别为字符串类型,避免自动转换导致的格式混乱。
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

