我尝试将数据从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的数据。
谢谢!
答案 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