SSIS表达式用于日期比较?

时间:2013-06-17 14:11:46

标签: sql-server-2008 ssis

我的表达如下:

DATEDIFF("dd",(DT_DATE)(SUBSTRING(@[User::strExcelFileName],15,2) + "-" + SUBSTRING(@[User::strExcelFileName],18,2) + "-" + SUBSTRING(@[User::strExcelFileName],21,4)),GETDATE()) > @[User::intDaysCount]

我的档案:TempConfigPr_06172013.xlsx

问题在于从“DT_WSTR”转换为数据类型“DT_DATE”时出现错误...有任何人请帮助,我出错了,如何解决这个问题?

注意:我查了一下,这个表达式工作正常。

DATEDIFF("dd",(DT_DATE)("11-18-2010"),GETDATE()) > @[User::intDaysCount]

1 个答案:

答案 0 :(得分:2)

在SSIS中编辑表达式可能很痛苦。我发现当它们没有按预期工作时,最好将它们分成多个变量并让它们互相补充。

通过这样做,我很快确定你的根问题是这个表达式没有生成有效的日期值。它生成了61-20-3.xl

SUBSTRING(@[User::strExcelFileName],15,2) + "-" 
+ SUBSTRING(@[User::strExcelFileName],18,2) + "-" 
+ SUBSTRING(@[User::strExcelFileName],21,4)

我创建了一个类型为string的变量strExcelFileDate,我使用该表达式创建了一个字符串,该字符串是下划线后面的8个字符。

SUBSTRING(@[User::strExcelFileName],  FINDSTRING(@[User::strExcelFileName], "_", 1)+1, 8)

该字符串值06172013不能直接转换为日期,这很可惜。我需要将该字符串切片并切成可以转换为日期数据类型的内容。创建了一个名为dtExcelFileDate的新变量,其类型为DateTime。我在其上使用了一个表达式将字符串转换为yyyy-mm-dd,然后将整个事物转换为DT_DATE数据类型。

(DT_DATE) (RIGHT(@[User::strExcelFileDate], 4) + "-" 
+ SUBSTRING(@[User::strExcelFileDate], 1,2) 
+ "-" + RIGHT(SUBSTRING(@[User::strExcelFileDate],1,4), 2))