SSIS将字符串转换为数据库日期

时间:2020-11-11 09:54:33

标签: string date ssis

我正在尝试在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程序包中,类似的表达式也可以正常工作。

任何答案都值得赞赏!

2 个答案:

答案 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);

输入是要转换,格式化和区域性的字符串。

相关问题