在SSIS派生列中将字符串日期转为YYYY-MM-DD格式的问题
SSIS派生列字符串转YYYY-MM-DD格式解决方案
你遇到的核心问题是MONTH()函数仅支持日期类型参数,无法直接处理字符串。以下两种方案可以解决这个问题:
方案一:日期转换法(简洁高效)
先将原字符串转换为SSIS支持的日期类型,再提取年、月、日并拼接成目标格式:
(DT_WSTR,4)YEAR((DT_DATE)[fechaexpedicion]) + "-" + RIGHT("0" + (DT_WSTR,2)MONTH((DT_DATE)[fechaexpedicion]), 2) + "-" + RIGHT("0" + (DT_WSTR,2)DAY((DT_DATE)[fechaexpedicion]), 2)
- 步骤说明:
(DT_DATE)[fechaexpedicion]:将字符串转换为日期类型YEAR()/MONTH()/DAY():分别提取年、月、日数值(DT_WSTR,n):将数值转换为指定长度的字符串RIGHT("0" + ...,2):为月份、日期补零,确保是两位格式
注意:该方案依赖SSIS运行环境支持英文月份的解析,若环境区域设置不兼容,可使用方案二。
方案二:字符串替换法(无区域限制)
直接对原字符串的月份缩写进行替换,避免日期转换的区域问题:
LEFT([fechaexpedicion],4) + "-" + REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( SUBSTRING([fechaexpedicion],6,3), "Jan","01"),"Feb","02"),"Mar","03"),"Apr","04"),"May","05"),"Jun","06"), "Jul","07"),"Aug","08"),"Sep","09"),"Oct","10"),"Nov","11"),"Dec","12") + "-" + SUBSTRING([fechaexpedicion],10,2)
- 步骤说明:
LEFT([fechaexpedicion],4):提取年份(前4位)SUBSTRING([fechaexpedicion],6,3):提取月份缩写(第6-8位)- 嵌套
REPLACE:将每个英文月份缩写替换为对应的两位数字 SUBSTRING([fechaexpedicion],10,2):提取日期(第10-11位)- 拼接所有部分为
YYYY-MM-DD格式
内容的提问来源于stack exchange,提问作者wessi
相关产品推荐
相关产品推荐

