我有一个逗号分隔的文本文件,我使用SSIS包导入SQL Server 2008。作为包的一部分,我有一个派生列作为文本文件的一部分是结束日期。我遇到的问题是,如果文本文件没有结束日期 00000000
而不是实际日期,例如 20130207
。在我的派生列编辑器中,我有以下表达式,它适用于不是全零的日期。
(DT_DATE)(SUBSTRING([Column 20],1,4) + "-" + SUBSTRING([Column 20],5,2) + "-" + SUBSTRING([Column 20],7,2))
任何人都可以提供有关如何最好地处理零的解决方案或帮助吗?
答案 0 :(得分:4)
派生列转换尝试将值00000000
转换为日期00-00-0000
,该日期不被视为有效日期值。
如果您的数据库列定义为 NULL
,这意味着它可以接受 NULL 值,请更改 {{1转换如下:
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))
,这意味着它无法接受 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列中找到的内容