1

我的表达如下:

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]
4

1 回答 1

2

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

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

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

我创建了一个字符串类型的变量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))
于 2013-06-17T15:04:46.660 回答