SSIS 将字符串转换为数据库日期
SSIS Cast String to Database Date
我正在尝试将字符串 (DT_WSTR) 转换为 SSIS 中的日期格式 (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 包中,类似的表达式工作正常。
如有任何答复,我们将不胜感激!
我找到了解决方案:
我必须将月份名称 OCT 转换为数字 10。
所以尝试了这个解决方案:
(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))
您可以使用脚本组件转换:
DateTime.ParseExact(Row.stringDate, "MMM dd yyyy", CultureInfo.InvariantCulture);
输入是要转换的字符串、格式和区域性。
我正在尝试将字符串 (DT_WSTR) 转换为 SSIS 中的日期格式 (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 包中,类似的表达式工作正常。
如有任何答复,我们将不胜感激!
我找到了解决方案:
我必须将月份名称 OCT 转换为数字 10。
所以尝试了这个解决方案:
(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))
您可以使用脚本组件转换:
DateTime.ParseExact(Row.stringDate, "MMM dd yyyy", CultureInfo.InvariantCulture);
输入是要转换的字符串、格式和区域性。