SSIS 2008:派生列将字符串转换为日期数据类型

时间:2011-06-21 16:21:52

标签: ssis ssis-data-types

我昨天使用了这个SSIS包,现在我收到了这个错误,一夜之间没有变化。

基本上我得到的字符串看起来像:yyyymmdd,我需要将其转换为日期数据类型。所以我采用子串,得到yyyy / mm / dd然后将其转换为日期类型。

路径:

平面文件来源---> Dervied Column --->我的所有SSIS包整合/插入任务

以下是表达式:

(DT_DATE)(SUBSTRING([PolicyExpire],1,4) + "/" + SUBSTRING([PolicyExpire],5,6) + "/" + SUBSTRING([PolicyExpire],7,8))
(DT_DATE)(SUBSTRING([BirthDate],1,4) + "/" + SUBSTRING([BirthDate],5,6) + "/" + SUBSTRING([BirthDate],7,8))
(DT_DATE)(SUBSTRING([DLIssueDate],1,4) + "/" + SUBSTRING([DLIssueDate],5,6) + "/" + SUBSTRING([DLIssueDate],7,8))

这是错误:

  

错误:提取EXD数据时出现0xC0049064   从Flatfile到YD db 1,Derived   列[3352]:发生错误   试图进行类型转换。

     

错误:提取EXD数据时出现0xC0209029   从Flatfile到YD db 1,Derived   列[3352]:SSIS错误代码   DTS_E_INDUCEDTRANSFORMFAILUREONERROR。   “组件”派生列“   (3352)“失败,因为错误代码   发生0xC0049064,错误行   对“输入栏”的处理   “PolicyExpire”(3368)“指定   错误失败。发生错误   指定的指定对象   零件。可能有错误   之前发布的消息有更多   有关失败的信息。

     

错误:提取EXD数据时出现0xC0047022   从Flatfile到YD db 1,   SSIS.Pipeline:SSIS错误代码   DTS_E_PROCESSINPUTFAILED。该   组件上的ProcessInput方法   “Derived Column”(3352)失败了   处理时出错代码0xC0209029   输入“派生列输入”(3353)。   已识别的组件返回了   ProcessInput方法的错误。   该错误特定于   组件,但错误是致命的   将导致数据流任务停止   运行。可能有错误消息   在此之前发布更多   有关失败的信息。

3 个答案:

答案 0 :(得分:1)

您的子字符串参数对于日期的月份和日期部分不正确。

例如,它应该是

SUBSTRING([PolicyExpire], 5,2

而不是

SUBSTRING([PolicyExpire]的 5,6 ) 获得月份值。

子串函数的第三个参数是要查找的子字符串的 LENGTH (在本例中为2),而不是子字符串的END POSITION。

试试这个

(DT_DATE)(SUBSTRING([PolicyExpire],1,4) + "/" + SUBSTRING([PolicyExpire],5,2) + "/" + SUBSTRING([PolicyExpire],7,2))

(DT_DATE)(SUBSTRING([BirthDate],1,4) + "/" + SUBSTRING([BirthDate],5,2) + "/" + SUBSTRING([BirthDate],7,2))

(DT_DATE)(SUBSTRING([DLIssueDate],1,4) + "/" + SUBSTRING([DLIssueDate],5,2) + "/"  + SUBSTRING([DLIssueDate],7,2))

答案 1 :(得分:0)

据推测,您尝试导入的数据今天有所不同。您的文本文件数据源是否存在昨天不存在的问题?

答案 2 :(得分:0)

上面的转换没有考虑NULL。检查[PolicyExpire]是否在其中一个记录中具有NULL值。