繁体   English   中英

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

[英]How to assign a default value to NULL dates using SSIS derived column transformation?

在我的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]

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

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

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM