我有以下简单的SSIS包来处理逗号分隔的文件:
我在日期列方面遇到问题-特别是MoveInDate
,其中输入列的数据格式为'20090731000000'
。
它进入数据库列MoveInDt
中,该列具有Datetime数据类型,并且数据的最终格式为:
'2009-07-31 00:00:00.000'
在SSIS中,我将输入列指定为DT_DBTIMESTAMP
。我无法弄清楚如何做一个简单的'如果MoveInDate为空,加载null,否则将数据更改为'YYYY-MM-DD 00:00:00.000'
现在我什至无法弄清楚如何加载硬编码日期
这失败了
一样
"2019-01-01"
或
(DT_DBTIMESTAMP)"2019-01-01"
(DT_DBTIMESTAMP)(DT_DATE)"2019-01-01"
错误:数据流任务,平面文件源[11]时为0xC02020A1:数据转换失败。 “移入日期”列的数据转换返回状态值2和状态文本“由于潜在的数据丢失,无法转换该值。”。
错误:数据流任务处的0xC0209029,平面文件源[11]:
在查找该消息时,我发现有关数据类型的帖子在输入到输出列上不匹配,但正在查看...
检查平面文件输入列,其定义为DT_DBTIMESTAMP
在查看输入输出属性时,目标列也定义为DT_DBTIMESTAMP
。
我在这里和其他地方查看了许多问题,并尝试将输入减少到输入文件中的一个简单行。我尝试过几次重新创建该程序包。
答案 0 :(得分:2)
如果数据以以下格式存储在平面文件中
20090731000000
然后将源列数据类型保留为DT_STR
,并添加具有以下表达式的衍生列:
(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) )
如果数据以以下格式存储:
2009-07-31 00:00:00
使用以下表达式:
(ISNULL([MoveInDate]) || [MoveInDate] == "")
? NULL(DT_DBTIMESTAMP)
: (DT_DBTIMESTAMP)[MoveInDate]
如果数据以以下格式存储:
2009-07-31
使用以下表达式:
(ISNULL([MoveInDate]) || [MoveInDate] == "")
? NULL(DT_DBTIMESTAMP)
: (DT_DBTIMESTAMP)([MoveInDate] + " 00:00:00")