【问题标题】:SSIS Cast String to Database DateSSIS 将字符串转换为数据库日期
【发布时间】:2020-11-11 09:54:33
【问题描述】:

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

感谢任何答案!

【问题讨论】:

    标签: string date ssis


    【解决方案1】:

    我找到了解决办法:

    我必须将月份名称 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))

    【讨论】:

      【解决方案2】:

      您可以使用脚本组件转换:

      DateTime.ParseExact(Row.stringDate, "MMM dd yyyy", CultureInfo.InvariantCulture);
      

      输入是要转换的字符串、格式和文化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-10-14
        • 2013-05-18
        • 2020-04-02
        • 2014-05-24
        • 1970-01-01
        • 2021-03-19
        • 1970-01-01
        相关资源
        最近更新 更多