SSIS平面文件导入 - 日期时间格式问题

我有一个平面文件,其中包含日期时间格式为"5/19/2017 05:22:23.777 PM"的数据。当我尝试使用SSIS转换将这些数据插入表中时,出现以下错误: [Flat File Source [2]] 错误: 数据转换失败。列"DT_Date"的数据转换返回状态值2和状态文本"The value could not be converted because of a potential loss of data."。 [Flat File Source [2]] 错误: SSIS错误代码DTS_E_INDUCEDTRANSFORMFAILUREONERROR。"Flat File Source.Outputs[Flat File Source Output].Columns["DT_Date"]"因错误代码0xC0209084而失败,并且在"Flat File Source.Outputs[Flat File Source Output].Columns["DT_Date"]"上指定了错误行处理。在指定组件的指定对象上发生错误。可能会有更多关于失败的信息在此之前发布的错误消息。 目标列被定义为datetime类型。 请帮助我解决这个问题,非常感谢您的任何帮助。 我该如何解决这个问题?

日期时间列类型 - gdw
你能手动将值更改为"5/19/2017 17:22:23.777",然后再尝试导入吗?我记得AM/PM可能会影响DT_DATE的转换。你原始的值可以成功转换为Datetime(SELECT CAST('5/19/2017 05:22:23.777 PM' AS DATETIME)),但是DT_DATE有点特殊。如果不行的话,先将其放入一个STRING列中,然后再将日期列更新为字符串列的值。 - SQLDevDBA
2个回答

尝试将您的输入列类型调整为DT_DBTIMESTAMP2。我曾经看到这个修复了类似令人讨厌的日期转换问题。这里有一个完整列表,说明了这些输入类型的含义。

我尝试了一下,结果还是出现了同样的错误。错误信息为“日期格式无效”。 - gdw
@gdw 你也试过DT_DBTIMESTAMP类型吗?它的精度较低,可能可以消除你的错误。 - John Eisbrener
我需要将这个格式的结果“5/24/2017 05:12:44.243 PM”转换成“2017-05-24 17:12:44.243”。我尝试使用以下派生列表达式进行转换:“(DT_DBTIMESTAMP)(SUBSTRING(EventDate,FINDSTRING(EventDate,"/",2) + 1,4) + "-" + SUBSTRING(EventDate,1,FINDSTRING(EventDate,"/",1) - 1) + "-" + SUBSTRING(EventDate,FINDSTRING(EventDate,"/",1) + 1,FINDSTRING(EventDate,"/",2) - FINDSTRING(EventDate,"/",1) - 1) + " " + SUBSTRING(EventDate,FINDSTRING(EventDate," ",1) + 1,8))",但是我得到的结果是“2017-05-22 05:21:00.000”,而且没有将12小时制转换为24小时制。 - gdw
我尝试使用DT_DBTIMESTAMP,但仍然出现错误。 - gdw

我确信这个问题早就被解决了,但我刚碰到了这个问题。我的解决方案是编辑源文件(.csv),将单词NULL替换为空白。