【问题标题】:SSIS: convert ISO 8601 string to datetime columnSSIS:将 ISO 8601 字符串转换为日期时间列
【发布时间】:2017-07-25 10:38:00
【问题描述】:

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

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

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql sql-server csv ssis etl


【解决方案1】:

假设日期列名是inColumn

在DataflowTask中,添加一个脚本组件,将inColumn标记为输入列,添加一个新的输出列outColumn,数据类型为DT_DBTIMESTAMP

在脚本中,在Input0_ProcessInputRow子中使用DateTime.ParseExact函数如下:

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

【讨论】:

    【解决方案2】:

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

    假设您使用的是 SQL Server,这应该可以工作:

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

    【讨论】:

    • 看起来确实如此,但使用上面@Hadi 的建议,我设法让它工作。
    猜你喜欢
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    相关资源
    最近更新 更多