情况概述:我有两个数据库(一个是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
答案 0 :(得分:2)
您是否尝试过DATEPART
功能
[ MyDate ][Replace "MyDate"][ DATEPART("yyyy", (DT_DBTIMESTAMP)MyDate) >= 2078 ? NULL(DT_WSTR, 10) : MyDate ]