SSIS派生列替换日期

时间:2016-01-11 14:01:04

标签: sql-server datetime ssis

情况概述:我有两个数据库(一个是DB2,一个是MSSQL),我正在使用SSIS包通过作业从一个到另一个。在我们的SQL表中,datetime字段被设置为SmallDateTime(几年前和几年前,此时还不能更改为DateTime)。我们现在收到的日期将在2099年(1/1/2099)之前完成,因为SmallDateTime只能在06/06/2079 11:59:59的MaxDate中出现。

我/我们的解决方案是使用派生列转换来检查日期,如果它超过2078年,则将其设为null。还建议在检查日期之前检查空值。

我试过这样做,

[Derived Column Name] [Derived Column  ] [Expression]
[        MyDate     ] [Replace "MyDate"] [MyDate == "" ? NULL(DT_WSTR,5) : MyDate]
[    VerifiedDates  ] [Add As New Column] [VerifiedDates == YEAR((DT_DBDATE)MyDate) > = 2078 ? NULL(DT_WSTR,10) : MyDate]

但这有两个原因无效。不仅表达错误,它也不允许我像第一次运行中那样替换“MyDate”列。我不能多次更换一列吗?这些任务是否同时发生?

由于这个问题,我试图通过表达式

替换日期
[    MyDate    ][Replace "MyDate"][YEAR((DT_DBDATE)MyDate) >= 2078 ? NULL(DT_WSTR, 10) : MyDate]

以及

[    MyDate    ][Replace "MyDate"][MyDate == YEAR((DT_DBDATE)MyDate) >= 2078 ? NULL(DT_WSTR, 10) : MyDate]

但这些似乎都不是正确的语法......任何人都可以指出我离开的地方吗?

我也无法找到合适的语法资源,目前正在使用this ref

1 个答案:

答案 0 :(得分:2)

您是否尝试过DATEPART功能

[    MyDate    ][Replace "MyDate"][ DATEPART("yyyy", (DT_DBTIMESTAMP)MyDate) >= 2078 ? NULL(DT_WSTR, 10) : MyDate ]