Csv SSIS将空白Datetime列转换为NULL并分析输入

Csv SSIS将空白Datetime列转换为NULL并分析输入,csv,datetime,ssis,etl,flat-file,Csv,Datetime,Ssis,Etl,Flat File,我有以下简单的SSIS包来处理逗号分隔的文件: 我对日期列有问题-特别是MoveInDate,输入列的数据格式为'20090731000000' 它进入数据库列MoveInDt,该列具有日期时间数据类型,数据以以下格式结束: '2009-07-31 00:00:00.000' 在SSIS中,我已将输入列指定为DT\u DBTIMESTAMP。我不知道如何执行简单的“如果MoveInDate为空,则加载null,否则将数据更改为“YYYY-MM-DD 00:00:00.000” 现在我甚至不知

我有以下简单的SSIS包来处理逗号分隔的文件:

我对日期列有问题-特别是
MoveInDate
,输入列的数据格式为
'20090731000000'

它进入数据库列
MoveInDt
,该列具有日期时间数据类型,数据以以下格式结束:

'2009-07-31 00:00:00.000'
在SSIS中,我已将输入列指定为
DT\u DBTIMESTAMP
。我不知道如何执行简单的“如果MoveInDate为空,则加载null,否则将数据更改为“YYYY-MM-DD 00:00:00.000”

现在我甚至不知道如何加载硬编码的日期

这失败了

同样

"2019-01-01"

错误:0xC02020A1位于数据流任务,平面文件源[11]:数据转换失败。“移入日期”列的数据转换返回状态值2和状态文本“由于可能丢失数据,无法转换该值”。
错误:0xC0209029位于数据流任务,平面文件源[11]:

在查找该消息时,我发现在“输入到输出”列中有一些关于数据类型不匹配的帖子,但在查看这些帖子时

检查平面文件输入列,它被定义为
DT_DBTIMESTAMP

在查看输入输出属性时,destination列也被定义为
DT_DBTIMESTAMP


我在这里和其他地方查看了许多问题,并尝试将输入减少到输入文件中的一个简单行。我已经多次尝试重新创建该包

如果数据以以下格式存储在平面文件中

20090731000000

然后将源列数据类型保留为
DT_STR
,并使用以下表达式添加一个dervied列:

(ISNULL([MoveInDate]) || [MoveInDate] == "") ? NULL(DT_DBTIMESTAMP) : 
    (DT_DBTIMESTAMP)(LEFT([MoveInDate],4) + "-" + 
                     SUBSTRING([MoveInDate],5,2) + "-" + 
                     SUBSTRING([MoveInDate],7,2) + " " + 
                     SUBSTRING([MoveInDate],9,2) + ":" + 
                     SUBSTRING([MoveInDate],11,2) + ":" + 
                     SUBSTRING([MoveInDate],13,2) )
(ISNULL([MoveInDate]) || [MoveInDate] == "") 
         ? NULL(DT_DBTIMESTAMP) 
         : (DT_DBTIMESTAMP)[MoveInDate]
(ISNULL([MoveInDate]) || [MoveInDate] == "") 
         ? NULL(DT_DBTIMESTAMP) 
         : (DT_DBTIMESTAMP)([MoveInDate] + " 00:00:00")
如果数据以以下格式存储:

2009-07-31 00:00:00

使用以下表达式:

(ISNULL([MoveInDate]) || [MoveInDate] == "") ? NULL(DT_DBTIMESTAMP) : 
    (DT_DBTIMESTAMP)(LEFT([MoveInDate],4) + "-" + 
                     SUBSTRING([MoveInDate],5,2) + "-" + 
                     SUBSTRING([MoveInDate],7,2) + " " + 
                     SUBSTRING([MoveInDate],9,2) + ":" + 
                     SUBSTRING([MoveInDate],11,2) + ":" + 
                     SUBSTRING([MoveInDate],13,2) )
(ISNULL([MoveInDate]) || [MoveInDate] == "") 
         ? NULL(DT_DBTIMESTAMP) 
         : (DT_DBTIMESTAMP)[MoveInDate]
(ISNULL([MoveInDate]) || [MoveInDate] == "") 
         ? NULL(DT_DBTIMESTAMP) 
         : (DT_DBTIMESTAMP)([MoveInDate] + " 00:00:00")
如果数据以以下格式存储:

2009-07-31

使用以下表达式:

(ISNULL([MoveInDate]) || [MoveInDate] == "") ? NULL(DT_DBTIMESTAMP) : 
    (DT_DBTIMESTAMP)(LEFT([MoveInDate],4) + "-" + 
                     SUBSTRING([MoveInDate],5,2) + "-" + 
                     SUBSTRING([MoveInDate],7,2) + " " + 
                     SUBSTRING([MoveInDate],9,2) + ":" + 
                     SUBSTRING([MoveInDate],11,2) + ":" + 
                     SUBSTRING([MoveInDate],13,2) )
(ISNULL([MoveInDate]) || [MoveInDate] == "") 
         ? NULL(DT_DBTIMESTAMP) 
         : (DT_DBTIMESTAMP)[MoveInDate]
(ISNULL([MoveInDate]) || [MoveInDate] == "") 
         ? NULL(DT_DBTIMESTAMP) 
         : (DT_DBTIMESTAMP)([MoveInDate] + " 00:00:00")

在处理了其他一些负载问题之后,我终于能够验证它是否正常工作。我很想知道是否有可能从DT_DBTIMESTAMP源数据类型加载,但在花了这么多时间之后,我很高兴它成功了。谢谢-非常有用。@rigoo44
20090731000000
无法隐式转换为
DT_DBTIMESTAMP
,因此将源列数据类型设置为
DT_DBTIMESTAMP
将不起作用。如果该列包含类似于
2009-07-31 00:00:00
的值,则可能有效