【问题标题】:SSIS Migrating data from Oracle to SQL Server. Need to find dates before '1900-01-01' and replace with nullSSIS 将数据从 Oracle 迁移到 SQL Server。需要查找 '1900-01-01' 之前的日期并替换为 null
【发布时间】:2016-02-29 23:50:51
【问题描述】:

我正在尝试将数据从 Oracle 数据库迁移到 SQL Server。该查询的日期无效,因此当我将它们放在 SQL Server 2012 中时,我想将它们更改为 NULL。我正在使用 SSIS,我正在尝试创建一个派生列来为我处理它,但我不能正确表达。

我的表达是:

[Date_Column] < 1900-01-01? NULL(DT_WSTR,50) : [Date_Column]

这不是我尝试的唯一语法,我也尝试过

[Date_Column] < "1900-01-01"? NULL(DT_WSTR,50) : [Date_Column]

[Date_Column] < (DT_DBDATE)1900-01-01? NULL(DT_WSTR,50) :[Date_Column]

还有很多其他的。

有没有更好的方法来做到这一点?

我对 PL/SQL 不太熟悉,但如果您有办法让我在查询中编辑它而不是使用转换,那就太好了!

另外,当我尝试使用 SSIS 将数据从 Oracle 迁移到 SQL Server 时,它会失败并抛出数据格式错误。我所做的只是将数据放入 SQL Server 中的临时表中(使用连接到 OLE DB 目标的 OLE DB 源)。数据类型只是DB_TIMESTAMP,但它不会完成。它只会加载 1/4 的数据。

谢谢!

【问题讨论】:

    标签: sql-server oracle date ssis format


    【解决方案1】:

    在 Oracle 方面,您可以在查询中使用 CASE 表达式将早于 1900-01-01 的日期转换为 NULL 值,例如

    with t as (
       select date '1000-01-01' as date_column from dual
        union
       select date '2000-01-01' as date_column from dual)
    select date_column,
           case when date_column < date '1900-01-01' then null else date_column end new_column
      from t
    
    DATE_COLUMN NEW_COLUMN
    ----------- ----------
    1000-01-01            
    2000-01-01  2000-01-01
    

    【讨论】:

      猜你喜欢
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多