如何将Excel数值列转换为DDMMYYYY格式日期 Data Conversion组件报错求解
数值列转自定义日期格式解决方案
报错核心原因:Data Conversion组件默认按系统日期序列(以1900-01-01为起始的偏移天数)转换数值,和你需要的「拆分数值字符拼接日期」规则不匹配,因此直接转换会报错或输出错误结果。以下是两种可落地的处理方案:
方案1:SSIS内使用派生列转换(无需修改源文件)
替换原有Data Conversion组件即可完成转换,操作步骤如下:
- 删除原有的Data Conversion组件,添加派生列转换组件,接入上游Excel数据源
- 新增自定义派生列,假设原数值列名为
NumDate,按你的需求选择对应表达式:- 需输出日期类型字段:
(DT_DATE)("19" + RIGHT((DT_WSTR,6)RIGHT("000000" + (DT_WSTR,10)NumDate,6),2) + "-" + SUBSTRING((DT_WSTR,6)RIGHT("000000" + (DT_WSTR,10)NumDate,6),3,2) + "-" + LEFT((DT_WSTR,6)RIGHT("000000" + (DT_WSTR,10)NumDate,6),2))- 直接输出
DD.MM.YYYY格式字符串(无需后续类型转换,稳定性更高):
LEFT((DT_WSTR,6)RIGHT("000000" + (DT_WSTR,10)NumDate,6),2) + "." + SUBSTRING((DT_WSTR,6)RIGHT("000000" + (DT_WSTR,10)NumDate,6),3,2) + ".19" + RIGHT((DT_WSTR,6)RIGHT("000000" + (DT_WSTR,10)NumDate,6),2) - 表达式逻辑说明:先将数值补零到6位,再按「前2位日、中2位月、后2位年+19前缀」的规则拼接,完全匹配你给出的40955转04.09.1955的需求。如果存在2000年后的日期,可在年拼接部分增加年份前缀判断逻辑即可。
方案2:Excel端预处理后导入
如果不想调整SSIS数据流,可直接在源文件处理后导入:
- 打开Excel数据表,新增一列,列名自定义(比如
FormattedDate) - 假设数值列在A列,第二行开始为数据,在新列第二行输入公式:
=TEXT(LEFT(TEXT(A2,"000000"),2)&"/"&MID(TEXT(A2,"000000"),3,2)&"/19"&RIGHT(TEXT(A2,"000000"),2),"dd.mm.yyyy") - 下拉填充整列后,将该列复制粘贴为固定值,再导入SSIS即可直接使用,无需额外转换。
校验建议
转换完成后可抽样对比数值和转换后日期的匹配度,排除长度异常的数值数据导致的转换错误。
内容的提问来源于stack exchange,提问作者priyadarshini p
相关产品推荐
相关产品推荐

