如何在SSIS派生列中将mm/d/yyyy格式转为dd/mm/yyyy?
解决SSIS派生列中MM/dd/yyyy到dd/mm/yyyy的日期格式转换问题
你的派生列表达式报错的核心原因是FINDSTRING函数的参数顺序写反了,且未处理单数字日/月的补零需求。以下是修正后的完整解决方案:
核心问题分析
FINDSTRING的正确语法为FINDSTRING(输入字符串, 搜索子串, 匹配次数),你之前把搜索子串和输入字符串的位置颠倒,导致无法正确定位分隔符;同时原日期中的单数字日(如9)需要补零为09,才能符合dd/mm/yyyy格式要求。
修正后的派生列表达式
RIGHT("0" + SUBSTRING([Dt], FINDSTRING([Dt], "/", 1) + 1, FINDSTRING([Dt], "/", 2) - FINDSTRING([Dt], "/", 1) - 1), 2) + "/" + RIGHT("0" + LEFT([Dt], FINDSTRING([Dt], "/", 1) - 1), 2) + "/" + SUBSTRING([Dt], FINDSTRING([Dt], "/", 2) + 1, 4)
表达式拆解说明
提取并补零日期(原dd部分):
RIGHT("0" + SUBSTRING([Dt], FINDSTRING([Dt], "/", 1) + 1, FINDSTRING([Dt], "/", 2) - FINDSTRING([Dt], "/", 1) - 1), 2)
定位第一个/后的内容,截取到第二个/前的日期部分,用RIGHT("0"+...,2)确保单数字补零(如9→09)。提取并补零月份(原MM部分):
RIGHT("0" + LEFT([Dt], FINDSTRING([Dt], "/", 1) - 1), 2)
截取第一个/前的月份部分,同样补零处理(如11保持11)。提取年份:
SUBSTRING([Dt], FINDSTRING([Dt], "/", 2) + 1, 4)
定位第二个/后的前4位字符,直接获取年份。
额外注意事项
- 若原字段包含时间后缀(如
11/9/2022 12:00:00 AM),上述表达式会自动忽略时间部分,仅保留日期段。 - 派生列的数据类型需设置为
DT_WSTR或DT_STR,长度设为10(刚好匹配dd/mm/yyyy的字符数)。 - 若需将转换后的字符串转为SQL日期类型,可后续添加数据转换组件,将字符串转换为
DT_DATE或DT_DBTIMESTAMP,也可在SQL端通过CONVERT函数直接处理。
内容的提问来源于stack exchange,提问作者Antônio Magalhaes
相关产品推荐
相关产品推荐

