SSIS将空白日期时间列转换为NULL和解析输入

问题描述 投票:3回答:1

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

enter image description here

我遇到了日期列的问题 - 特别是MoveInDate,输入列的格式为'20090731000000'

它进入一个数据库列MoveInDt,它具有Datetime数据类型,数据最终格式为:

'2009-07-31 00:00:00.000'

在SSIS中,我已将输入列指定为DT_DBTIMESTAMP。我无法弄清楚如何做一个简单的'如果MoveInDate为空,加载null,否则将数据更改为'YYYY-MM-DD 00:00:00.000'

现在我甚至无法弄清楚如何加载硬编码的日期

这失败了

Derived Column

同样如此

"2019-01-01"

要么

(DT_DBTIMESTAMP)"2019-01-01"
(DT_DBTIMESTAMP)(DT_DATE)"2019-01-01"

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

查看该消息我发现有关数据类型在输入到输出列上不匹配的帖子,但看着它......

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

enter image description here

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

enter image description here

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

csv datetime ssis flat-file ssis-2014
1个回答
2
投票

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

20090731000000

然后将源列数据类型保留为qazxsw poi,并使用以下表达式添加派生列:

DT_STR

如果数据以以下格式存储:

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) )

如果数据以以下格式存储:

2009-07-31

使用以下表达式:

(ISNULL([MoveInDate]) || [MoveInDate] == "") 
         ? NULL(DT_DBTIMESTAMP) 
         : (DT_DBTIMESTAMP)[MoveInDate]
© www.soinside.com 2019 - 2024. All rights reserved.