SSIS:将ISO 8601字符串转换为datetime列

时间:2017-03-05 16:14:07

标签: sql sql-server csv ssis sql-server-2016

我有一个CSV falt文件我尝试使用SSIS导入。日期字符串的格式为 20170215T000002 - 这看起来像ISO 8601,因此我非常确定我应该能够将其映射到 datetime 列类型在SQL中,但我丢失了所有的时间数据,只是获取日期组件(正确解析)。

有关如何在SQL中将此文本元素转换为 datetime 格式的任何建议吗?

2 个答案:

答案 0 :(得分:2)

假设日期列名称为inColumn

在DataflowTask中,添加脚本组件,将inColumn标记为输入列,使用dataType DT_DBTIMESTAMP

添加新的输出列outColumn

在脚本中,在Input0_ProcessInputRow子使用DateTime.ParseExact功能如下:

Row.inColumn =  DateTime.ParseExact(Row.inColumn,"yyyyMMddTHHmmss",New System.Globalization.CultureInfo("en-GB"))

答案 1 :(得分:1)

我认为ISO 8601有时间分隔符的冒号。

假设您使用的是SQL Server,这应该可行:

select convert(datetime,
               stuff(stuff(col, 14, 0, ':'), 12, 0, ':'),
               126)