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

4 sql expression ssis

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

CSV中的数据如下所示:

01011990
01011990
01011990
01011990
01011990
Run Code Online (Sandbox Code Playgroud)

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

[SHIPPED DATE] date NOT NULL
Run Code Online (Sandbox Code Playgroud)

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

(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
Run Code Online (Sandbox Code Playgroud)

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

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

我的CSV列是WSTR,我在SQL DB中的目标是"日期"列.

我试图使用的转换是:ISNULL([SHIPPED_DATE])?"1900-01-01":[SHIPPED_DATE]

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

小智 10

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

Part 2你有它[SHIPPED_DATE],DT_DBDATE因为你已经在派生列转换中转换了这个值.

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

 ISNULL([SHIPPED_DATE]) ? "1900-01-01" : [SHIPPED_DATE]
Run Code Online (Sandbox Code Playgroud)

 ISNULL([SHIPPED_DATE]) ? (DT_DBDATE)"1900-01-01" : [SHIPPED_DATE]
Run Code Online (Sandbox Code Playgroud)