SSIS将数据从Oracle迁移到SQL Server。需要在1900-01-01' 1900-01-01之前找到日期。并替换为null

时间:2016-02-29 23:50:51

标签: sql-server oracle date ssis format

我尝试将数据从Oracle数据库迁移到SQL Server。该查询具有无效日期,因此当我将它们放入SQL Server 2012时,我想将无效日期更改为NULL。我使用SSIS并且我尝试创建派生列来为我处理它但是我无法正确表达。

我的表达是:

onResume

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

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

还有很多其他人。

有更好的方法吗?

我对PL / SQL不太熟悉,但如果你有办法让我在查询中编辑它而不是使用一个很棒的转换!

此外,当我尝试使用SSIS将数据从Oracle迁移到SQL Server时,它会失败并抛出数据格式错误。我所做的就是将数据放入SQL Server的临时表中(使用连接到OLE DB目标的OLE DB源)。数据类型只是[Date_Column] < "1900-01-01"? NULL(DT_WSTR,50) : [Date_Column] [Date_Column] < (DT_DBDATE)1900-01-01? NULL(DT_WSTR,50) :[Date_Column] ,但它不会完成。它只会加载1/4的数据。

谢谢!

1 个答案:

答案 0 :(得分:1)

在Oracle方面,您可以将早于1900-01-01的日期转换为查询中带有CASE表达式的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