我正在尝试在SSIS中将字符串(DT_WSTR)转换为日期格式(DT_DBDATE)。
我的来源是一个Excel文件,输入字段如下: OCT 04 2020
我的结果应采用 2020-10-04
的格式我使用派生列编辑器并创建了此表达式:
(DT_DBDATE)(SUBSTRING([BILLING CYCLE DATE],8,4) + "-" + SUBSTRING([BILLING CYCLE DATE],1,3) + "-" + SUBSTRING([BILLING CYCLE DATE],5,2))
我得到的错误是:
[派生列[312]]错误:尝试执行类型转换时发生错误。
[派生列[312]]错误:SSIS错误代码DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “组件“派生列”(312)”失败,因为发生了错误代码0xC0049064,并且“输入列“ BILLING CYCLE DATE”(388)”上的错误行配置指定发生错误。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PROCESSINPUTFAILED。处理输入“派生列输入”(313)时,组件“派生列”(312)上的ProcessInput方法失败,错误代码为0xC0209029。所标识的组件从ProcessInput方法返回了错误。该错误特定于组件,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
我知道有几个类似的问题,我也尝试了很多,但到目前为止没有任何帮助。
我不知道为什么它不能像一个月前那样工作。在其他SSIS程序包中,类似的表达式也可以正常工作。
任何答案都值得赞赏!
答案 0 :(得分:0)
我找到了解决方法:
我不得不将月份名称 OCT 转换为数字 10 。 因此尝试了以下解决方案:Convert month name to month number in SSIS
(SUBSTRING([BILLING CYCLE DATE],1,3) == "OCT" ? "10" : "") + SUBSTRING([BILLING CYCLE DATE],4,3) + SUBSTRING([BILLING CYCLE DATE],7,5)
之后,我在单独的“派生列”中执行了上述表达式,并且效果很好!
(DT_DBDATE)(SUBSTRING([BILLING CYCLE DATE],7,4) + "-" + SUBSTRING([BILLING CYCLE DATE],1,2) + "-" + SUBSTRING([BILLING CYCLE DATE],4,2))
答案 1 :(得分:0)
您可以使用脚本组件转换:
DateTime.ParseExact(Row.stringDate, "MMM dd yyyy", CultureInfo.InvariantCulture);
输入是要转换,格式化和区域性的字符串。