4

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

来自 CSV 的数据如下所示:

01011990
01011990
01011990
01011990
01011990

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

[SHIPPED DATE] date NOT NULL

首先,我通过将列推入派生转换来修复日期值,该派生转换具有:

(DT_DBDATE)(SUBSTRING([发货日期],1,2) + "/" + SUBSTRING([发货日期],3,2) + "/" + SUBSTRING([发货日期],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”:[发货日期]

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

4

1 回答 1

11

改变你的表达方式,如下所示。三元运算符有两个部分。

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

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

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

 ISNULL([SHIPPED_DATE]) ? (DT_DBDATE)"1900-01-01" : [SHIPPED_DATE]
于 2012-10-31T20:38:48.290 回答