如何避免使用包含零的值导出列日期转换错误?

时间:2013-02-07 11:46:17

标签: sql ssis

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

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

任何人都可以提供有关如何最好地处理零的解决方案或帮助吗?

2 个答案:

答案 0 :(得分:4)

原因:

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

选项1:数据库列允许NULL

如果您的数据库列定义为 NULL ,这意味着它可以接受 NULL 值,请更改 {{1转换如下:

Derived Column

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

如果您的数据库列定义为 [Column 20] == "00000000" ? NULL(DT_DATE) : (DT_DATE)(SUBSTRING([Column 20],1,4) + "-" + SUBSTRING([Column 20],5,2) + "-" + SUBSTRING([Column 20],7,2)) ,这意味着它无法接受 NULL 值,请更改 {{1转换如下:

NOT NULL

答案 1 :(得分: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列是否为8个零然后它将日期01-01-1900关联,否则它将转换它在第20列中找到的内容