SSIS将ISO格式的日期时间转换为YYYY-MM-DDTHH:MM:SS.000Z。

9

我有一个带有日期列的平面文件,它采用ISO 8601日期时间标准进行格式化。 格式如下:2013-10-28T10:23:01.000Z

我该如何将其转换为日期时间戳格式? 我已经使用了“派生列”,但是我没有找到类型转换。

1个回答

13
我创建了一个示例包,添加了一个平面文件连接管理器,并定义了两列数据类型为DT_I4和DT_DATE。
rownum,eventdate
1,2013-10-28T10:23:01.000Z

我随后添加了一个数据流并使用Flat File Source,选择了源文件,结果导入失败。导入失败是因为最让人发狂的错误。

数据转换失败。列“eventdate”的数据转换返回状态值2和状态文本“由于可能会丢失数据,因此无法转换该值。”

怎么可能把日期转换成非日期呢?设计决策是尽可能友好地导入数据。这意味着使用标准文本表示方式(如日期时间)的人会遇到问题。美国人可以懒得用 01-02-05,而其数据会被解释为 2005年1月2日,而英国懒虫则可以让他们的数据被解释为 2005年2月1日,至于日本人则认为大家都疯了,因为显然应该是 2001年2月5日

所以,默认情况下SSIS试图超越您的源数据,所以应该归咎于地域。解决方案是告诉SSIS闭嘴并接受我的数据!

闭嘴并接受我的数据!

在数据流中,右键单击数据源并选择高级编辑器。在Input Output Properties选项卡中,展开您的输出列,并为每个包含此数据的列将FastParse从默认值false更改为True

FastParse


谢谢,这样做可以了。为了增加一些上下文:我的(ISO 8601)DateTime字段看起来像 2019-05-12T03:13:22.000ZTZ是可选的),目标列在数据库中被定义为datetime2(3)(如果您没有/不需要秒的小数部分,可以使用datetime2(0));SSIS Flat File Con列的DataType仅被定义为DT_DATE,然后我使用了上面描述的FastParse=True选项。 - wp78de

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接