【问题标题】:SSIS Convert Blank Datetime column to NULL and Parse InputSSIS 将空白日期时间列转换为 NULL 并解析输入
【发布时间】:2019-03-13 17:36:36
【问题描述】:

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

我在使用日期列时遇到问题 - 特别是 MoveInDate,其中输入列的数据格式为 '20090731000000'。

它进入数据库列MoveInDt,该列具有日期时间数据类型,数据最终格式为:

'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"

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

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

查看平面文件输入栏,定义为DT_DBTIMESTAMP

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

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

【问题讨论】:

    标签: csv datetime ssis etl flat-file


    【解决方案1】:

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

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

    【讨论】:

    • 在解决了其他一些负载问题后,我终于能够验证它是否有效。我很想知道是否可以从 DT_DBTIMESTAMP 源数据类型加载,但是在花了这么多时间之后,我很高兴它起作用了。谢谢 - 非常有用。
    • @rigoo44 20090731000000 无法隐式转换为DT_DBTIMESTAMP,因此将源列数据类型设置为DT_DBTIMESTAMP 将不起作用。如果该列包含类似于2009-07-31 00:00:00 的值,它可能会起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    相关资源
    最近更新 更多