Talend中校验HIRE_DATE是否为合法dd-mm-yy格式并转换的实现方法
Talend 日期校验转换需求实现方案
场景说明
原始数据如下:
EMPNO HIRE_DATE ---------- ----------- 1 12-11-87 2 02-04-88; 3 02-2323
其中Empno为数值类型,hire_date为字符串类型。需求为校验hire_date字段:若符合dd-mm-yy合法日期格式,就转换为指定格式的日期写入目标端,不符合则写入null。
预期输出:
EMPNO HIRE_DATE -------- --------- 1 11-DEC-87 2 null 3 null
具体实现步骤
- 第一步:配置对应输入组件(如读取数据库用
tDBInput、读取文本文件用tFileInputDelimited),读取原始数据,确认字段类型:EMPNO为Integer类型,HIRE_DATE为String类型。 - 第二步:添加
tMap组件和输入组件相连,在tMap的输出表中新增输出字段(可命名为out_hire_date),字段类型根据目标端要求选择Date或String类型,写入如下校验转换表达式:
// 若需输出需求中提到的mm/dd/yy格式字符串,使用该表达式 TalendDate.isDate(row1.HIRE_DATE, "dd-MM-yy") ? TalendDate.formatDate("MM/dd/yy", TalendDate.parseDate("dd-MM-yy", row1.HIRE_DATE)) : null // 若需输出示例中的带英文月份缩写的dd-MMM-yy格式字符串,使用该表达式 TalendDate.isDate(row1.HIRE_DATE, "dd-MM-yy") ? TalendDate.formatDate("dd-MMM-yy", TalendDate.parseDate("dd-MM-yy", row1.HIRE_DATE), java.util.Locale.ENGLISH) : null
逻辑说明:
TalendDate.isDate会严格校验字符串是否匹配指定日期格式,包括格式规则、日期逻辑合法性(如月份不能超过12、日期不能超出当月最大天数等),校验不通过直接返回null,符合要求则按指定格式转换。
- 第三步:配置输出组件(对应输入选
tDBOutput或tFileOutputDelimited)和tMap的输出端相连,字段映射规则为:EMPNO直接取原始输入的EMPNO,HIRE_DATE取tMap中生成的out_hire_date。 - 第四步:运行作业即可得到符合预期的输出结果。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

