【问题标题】:Convert date string to datetime in SSIS在SSIS中将日期字符串转换为日期时间
【发布时间】:2014-05-24 06:46:29
【问题描述】:

我在 SSIS 中将日期字符串转换为日期时间时遇到问题。问题是源数据以这种格式存储日期:m(m)/d(d)/yyyy,即 3/8/2014、10/5/2013、12/22/2014。我已经尝试过使用数据转换,但它不起作用。我还检查了数据质量,它们都很好——没有奇怪的字符串。请问有谁知道如何修复这个包?

非常感谢!

【问题讨论】:

  • 您是如何尝试转换日期的?你用的是什么类型、格式?源类型是字符串还是在 SSIS 中加载日期时间时将其转换为字符串?
  • "我已经尝试过使用数据转换,但是不行。"您尝试了什么,输入数据是什么,失败的原因是什么?
  • @JonSkeet,感谢您的反馈。来源是 Excel 工作表。在转换数据之前,我有一个派生列来去除不规则数据,并将该字段留空或上面格式的 Unicode 字符串。在数据转换转换中,我将数据类型设置为 [DT_DBTIMESTAMP]。运行包时出现错误:“由于可能丢失数据,无法转换值”
  • @PanagiotisKanavos 感谢您的反馈。请看我上面的评论
  • @user2683470:嗯,现在还不清楚你的意思。显示您的代码会更容易理解...

标签: datetime ssis type-conversion data-conversion


【解决方案1】:

我编辑了源代码,将值导出为 yyyy-MM-dd HH:mm:ss

所以,当它通过 SSIS 时,它能够通过数据转换转换工具进行原生转换

【讨论】:

    【解决方案2】:

    这是我用的。它将 col 格式化为 yyyy-MM-dd 格式,然后转换为 DT_DBDATE,因此如果您只想要日期字符串,则可以删除包装转换。

    (DT_DBDATE)(SUBSTRING(MYCOL,FINDSTRING(MYCOL,"/",2) + 1,4) + "-" + RIGHT("0" + SUBSTRING(MYCOL,1,FINDSTRING(MYCOL,"/",1) - 1),2) + "-" + RIGHT("0" + SUBSTRING(MYCOL,FINDSTRING(MYCOL,"/",1) + 1,FINDSTRING(MYCOL,"/",2) - FINDSTRING(MYCOL,"/",1) - 1),2))
    

    【讨论】:

      【解决方案3】:

      尝试使用(DT_TIMESTAMP)(DT_DBDATE) 转换为日期然后是日期时间。

      【讨论】:

      • 如果您可以提供 OP 的代码,那将非常有帮助。
      【解决方案4】:

      首先您需要将 Date 转换为 unicode 字符串,现在您可以使用派生列元素进行转换。

      派生列代码:

      (DT_DATE)(SUBSTRING(col,FINDSTRING(col,"/",2) + 1,4) + "-" +
                SUBSTRING(col,1,FINDSTRING(col,"/",1) - 1) + "-" + 
                SUBSTRING(col,FINDSTRING(col,"/",1) + 1,FINDSTRING(col,"/",2) - FINDSTRING(col,"/",1) - 1))
      

      结果:

      col         NewDateColumn
      3/8/2014    2014-03-08 00:00:00.0000000
      10/5/2013   2013-10-05 00:00:00.0000000
      12/22/2014  2014-12-22 00:00:00.0000000
      

      【讨论】:

        【解决方案5】:

        我会为此使用脚本转换。然后,您可以利用具有卓越功能的 .NET Framework,例如日期时间.TryParse。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-03-19
          • 1970-01-01
          • 1970-01-01
          • 2015-09-17
          • 2022-10-14
          • 2011-12-16
          • 1970-01-01
          相关资源
          最近更新 更多