如何使用SSIS派生列转换为NULL日期分配默认值?

时间:2012-10-31 20:30:11

标签: sql ssis expression

在我的SQL 2008 SSIS环境中,我有来自CSV文件的数据,我需要修复空日期。

CSV中的数据如下所示:

01011990
01011990
01011990
01011990
01011990

在我的临时表中,我有一个列定义为:

[SHIPPED DATE] date NOT NULL

首先,我通过将列推送到具有以下内容的派生变换来修复日期值:

  

(DT_DBDATE)(SUBSTRING([SHIPPED DATE],1,2)+“/”+ SUBSTRING([SHIPPED DATE],3,2)+“/”+ SUBSTRING([SHIPPED DATE],5,4) )

上述转换使我的字符串日期从CSV导入到我的SQL数据库中的日期列。

这个输出是:

1990-01-01
1990-01-01
1990-01-01
1990-01-01
1990-01-01

Next ,我想处理NULL日期,以便我可以坚持我的数据库中的“NOT NULL”定义。我想要做的是将NULL日期指定为默认值,但我收到如下错误消息:

  

CSV到SQL的错误[派生列[24817]]:数据类型“DT_WSTR”和“DT_DBDATE”与条件运算符不兼容。操作数类型不能隐式转换为条件操作的兼容类型。要执行此操作,需要使用强制转换运算符显式转换一个或两个操作数。

我的CSV列是WSTR,我在SQL DB中的目标是“日期”列。

我尝试使用的转换是:     ISNULL([SHIPPED_DATE])? “1900-01-01”:[SHIPPED_DATE]

由于上述消息,它不想工作。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:11)

更改表达式,如下所示。三元运算符有两部分。

Part 2 您将其设为[SHIPPED_DATE],其类型为DT_DBDATE,因为您已在派生列转换中投射此值。

但是, Part 1 只是被指定为文字"1900-01-01"。您需要在该字符串值之前添加(DT_DBDATE)以将其转换为日期格式,以便在三元运算符上指定的值都具有相同的数据类型。

 ISNULL([SHIPPED_DATE]) ? "1900-01-01" : [SHIPPED_DATE]

 ISNULL([SHIPPED_DATE]) ? (DT_DBDATE)"1900-01-01" : [SHIPPED_DATE]