Csv SSIS将空白Datetime列转换为NULL并分析输入
我有以下简单的SSIS包来处理逗号分隔的文件: 我对日期列有问题-特别是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” 现在我甚至不知
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
的值,则可能有效