【问题标题】:SSIS Derived Column Replace DatesSSIS 派生列替换日期
【发布时间】:2016-04-15 20:52:29
【问题描述】:

情况概述:我有两个数据库(一个是 DB2,一个是 MSSQL),我正在使用 SSIS 包通过作业从一个数据库提供给另一个数据库。在我们的 SQL 表中,日期时间字段设置为 SmallDateTime(多年前,目前无法更改为 DateTime)。我们现在得到的日期是 2099 年(2099 年 1 月 1 日),因为 SmallDateTime 只能达到 06/06/2079 11:59:59 的 MaxDate 失败。

我/我们的解决方案是使用派生列转换来检查日期,如果超过 2078 年,则将其设为 null。还建议在检查日期之前检查 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

【问题讨论】:

    标签: sql-server datetime ssis


    【解决方案1】:

    您是否尝试过 DATEPART 函数

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

    【讨论】:

    • 我现在试试;一秒
    • 这似乎对我有用,谢谢!我确实必须将其更改为 DT_DBDATE 而不是时间戳,因为它引发了溢出错误。非常感谢:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    相关资源
    最近更新 更多