2012-12-06 106 views
3

从具有包含年份和月份的列的平面文件中以下列格式读取 - >“201212”。SSIS派生列表达式

我需要将其插入到DATETIME2列中,但首先我必须用“/”来解析它,并在当天添加“01”。这样201212将成为2012年12月1日

我在我的派生列转换表达式如下:

(DT_DBTIMESTAMP2,0)((DT_WSTR,4)SUBSTRING(RptMthDTM,1,4) + "/" + (DT_WSTR,2)SUBSTRING(RptMthDTM,5,2) + "/" + "01") 

这看起来像它应该工作,SSIS接受这个(在它能够解析表达式),但是在运行包时它会抛出一个完全无用的错误“尝试执行类型转换时发生错误。”以及它有错误的列。

我没有建立这个软件包,它在我身上被仿制掉,我被告知让它工作。

在此先感谢interwebs家族。

+0

“201212”是否准确?或者应该是'20121212'(YYYYMMDD)? – billinkc

+0

y 201212是准确的。为什么他们只是想存储这个月没有一天我不知道 – swegs

回答

2

DT_DBTIMESTAMP2只能从一个特定的字符串格式转换:yyyy-mm-dd hh:mm:ss[.fffffff]

可以使用此表达式来代替:

(DT_DBTIMESTAMP2,0)((DT_WSTR,4)SUBSTRING(RptMthDTM,1,4) + "-" + (DT_WSTR,2)SUBSTRING(RptMthDTM,5,2) + "-" + "01 00:00:00") 

更多细节: [http://msdn.microsoft.com/en -us/library/ms141036.aspx] [1]

+0

谢谢先生。我确实检查了一下,以确保我可以在两者之间进行转换,但不会因为我选择使用“/”而不是“ - ”而导致失败。 – swegs