2016-10-03 89 views
0

我正在尝试使用MS-SSIS 2012加载CSV文件。CSV中的日期格式为:SSIS处理日期和空日期?

1900-12-12 
1987-01-23 
.. etc 

我写这段代码的日期从字符串转换为日期,然后修复空值(不是每行始终有一个日期)

(DT_DATE)(SUBSTRING(ISNULL(Geboortedatum) ? "1900-01-01" : Geboortedatum,1,4) + "-" + SUBSTRING(ISNULL(Geboortedatum) ? "1900-01-01" : Geboortedatum,6,2) + "-" + SUBSTRING(ISNULL(Geboortedatum) ? "1900-01-01" : Geboortedatum,9,2)) 

这种失败。我原来是;

(DT_DATE)(SUBSTRING(Geboortedatum,1,4) + "-" + SUBSTRING(Geboortedatum,6,2) + "-" + SUBSTRING(Geboortedatum,9,2)) 

哪些工作正常,直到我在我的文件中获得NULL值。有任何想法吗?

+0

你可以发布错误吗? –

+0

[派生列[40]]错误:尝试执行类型转换时发生错误。 [派生列[40]]错误:SSIS错误代码DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “派生列”失败,因为发生了错误代码0xC0049064,并且“派生Column.Outputs [派生列输出] .Columns [Datumformat]”上的错误行处置指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,提供有关失败的更多信息。 –

回答

0

试试这个。稍微复杂一点,然后你的代码稍快:)

(DT_DATE) (ISNULL(Geboortedatum) ? "1900-01-01" : (SUBSTRING(Geboortedatum,1,4) + "-" + SUBSTRING(Geboortedatum,6,2) + "-" + SUBSTRING(Geboortedatum,9,2))) 
+0

感谢您的帮助。我犯了同样的错误。在我的CSV文件中,日期介于引号之间,例如; “2015-01-01”,当它为空时,显示为“”。难道这不被视为“真正的”空值? –

+0

尝试删除平面文件连接管理器编辑中的文本限定符标记中的引号,将“ –

0

这样做的工作..它似乎不是一个真正的空值。

(DT_DATE)(TRIM(Geboortedatum) == "" ? "1900-01-01" : (SUBSTRING(Geboortedatum,1,4) + "-" + SUBSTRING(Geboortedatum,6,2) + "-" + SUBSTRING(Geboortedatum,9,2)))