如何避免值包含零的派生列日期转换错误?

Sil*_*bob 1 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))
Run Code Online (Sandbox Code Playgroud)

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

小智 5

原因:

派生列转换试图将值转换为00000000date 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))
Run Code Online (Sandbox Code Playgroud)

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