1

我有一个逗号分隔的文本文件,我使用 SSIS 包将其导入 SQL Server 2008。作为包的一部分,我有一个派生列作为文本文件的一部分是结束日期。我遇到的问题是,如果文本文件没有结束日期,00000000而不是真实日期,例如20130207. 在我的派生列编辑器中,我有以下表达式,它适用于不全为零的日期。

(DT_DATE)(SUBSTRING([Column 20],1,4) + "-" + SUBSTRING([Column 20],5,2) + "-" + SUBSTRING([Column 20],7,2))

谁能提供有关如何最好地处理零的解决方案或帮助?

4

2 回答 2

5

原因:

派生列转换正在尝试将该值转换00000000为日期00-00-0000,这不被视为有效的日期值。

选项 1:数据库列允许 NULL

如果您的数据库列定义为NULL,这意味着它可以接受NULL值,请更改转换中的表达式,Derived Column如下所示:

[Column 20] == "00000000" ? NULL(DT_DATE) : (DT_DATE)(SUBSTRING([Column 20],1,4) + "-" + SUBSTRING([Column 20],5,2) + "-" + SUBSTRING([Column 20],7,2))

选项 2:数据库列不允许 NULL

如果您的数据库列定义为NOT NULL,这意味着它不能接受NULL值,请更改转换中的表达式,Derived Column如下所示:

[Column 20] == "00000000" ? (DT_DATE) "1900-01-01" : (DT_DATE)(SUBSTRING([Column 20],1,4) + "-" + SUBSTRING([Column 20],5,2) + "-" + SUBSTRING([Column 20],7,2))
于 2013-02-07T13:40:04.510 回答
0

尝试

[Column 20] = "00000000" ? (DT_DATE("19000101") : (DT_DATE)(SUBSTRING([Column 20],1,4) + "-" + SUBSTRING([Column 20],5,2) + "-" + SUBSTRING([Column 20],7,2))

本质上,它试图做的是检查第 20 列是否是八个零,然后它关联一个日期 01-01-1900,否则它会转换它在第 20 列中找到的内容

于 2013-02-07T13:36:34.503 回答