【问题标题】:how do I import a date like 2009-12-05 11:40:00 into SQL via CSV?如何通过 CSV 将 2009-12-05 11:40:00 之类的日期导入 SQL?
【发布时间】:2009-12-23 09:18:45
【问题描述】:

我正在使用导入/导出向导将一些数据导入到表中。总共 2 行,所以我一直在解决这个问题,但我想知道答案。

导入/导出的问题在于日期。不管我做什么,他们都失败了。日期对我来说看起来很简单:2009-12-05 11:40:00。我也试过:2010-03-01 12:00 PM。尝试将 DT_DATE 和 DT_DBTIMESTAMP 作为源数据类型。目标列类型是日期时间。

我得到的信息是:

列的数据转换 “Start_Date”返回状态值 2 和状态文本“值不能 因为有潜力而被转换 数据丢失。”。

我该如何解决这个问题?为什么导入/导出向导在解析日期方面如此糟糕(或者在我的想象中)?

这里真正令人讨厌的是,当您从表格中选择一个日期列并将其保存为 CSV 时,您会得到一个类似于“2009-12-05 11:40 AM”的日期。因此,导入向导甚至无法解析来自 SQL Server 的日期。真的吗?真的吗?

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    添加了详细信息(在重新访问我遇到问题的包后发现我的描述不正确):

    导入的东西很糟糕。

    在我的例子中,我收到了表单匹配 SQL Server 类型 126 / ISO8601 的传入数据。也就是说,在 T-SQL 中,这种形式:

    select convert ( varchar(100), getdate(), 126 )
    
    --> 2009-12-22T16:29:22.123
    

    我可以通过两个步骤使用 SSIS 导入:

    1. 将“T”替换为空格“”,使用带有表达式的 SSIS 派生列:

      REPLACE(DateColumn,"T","")

    2. 使用数据转换转换将结果转换为数据库时间戳 [DT_DBTIMESTAMP]

    如果我造成任何混乱,请道歉。

    【讨论】:

    • 那我是不是得把它保存为SSIS包,然后进去编辑那个字段的转换?
    • 是的,您可以通过向导拒绝的包中的列转换来做到这一点。
    • 感谢您的帮助。令人讨厌的是,我需要竭尽全力解析日期。但我知道这不是我明显遗漏的东西,我感觉好多了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2014-05-29
    相关资源
    最近更新 更多