【问题标题】:Convert YYYY-MMM-DD to date in SSIS在 SSIS 中将 YYYY-MMM-DD 转换为日期
【发布时间】:2015-06-04 23:17:26
【问题描述】:

我有一个日期字段格式为 YYYY-MMM-DD HH24:MM:SS 的平面文件:

2015-Apr-09 06:57:21.980549

我想将它作为日期时间加载到我的表中,知道如何进行此转换吗?

我正在使用 SSIS 2014

【问题讨论】:

  • 显示您尝试过的内容。
  • 我已经尝试在平面文件连接管理器和转换组件中将该字段设置为 dbtime2,但都无法正常工作

标签: ssis


【解决方案1】:

问题在于愚蠢的 MMM 部分。

要在不借助 .net 脚本的情况下摆脱它,请使用以下公式添加派生列:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(testdate,"Jan","01"),"Feb","02"),"Mar","03"),"Apr","04"),"May","05"),"Jun","06"),"Jul","07"),"Aug","08"),"Sep","09"),"Oct","10"),"Nov","11"),"Dec","12")

然后,将结果列通过管道传输到数据转换,并将目标类型设置为精度为 7 的 DB_DBTIMESTAMP2(以免丢失数据精度),如果可以接受精度损失,则将其设置为 DB_DBTIMESTAMP。

后者应隐式转换为 DATE,但如果不是,则需要显式执行另一次转换。

【讨论】:

    【解决方案2】:

    一种灵活且快速的方法是:

    第 1 步:将派生列转换模块添加到您的数据流中: http://social.technet.microsoft.com/wiki/contents/articles/7399.ssis-derived-column-transformation.aspx

    使用这种方法,您可以灵活地修改 - 您可以从多个列构建日期列,例如:

    第 2 步:在转换的“表达式”字段中,您必须使用这样的 CAST: (DT_DBTIMESTAMP2, 4) [你的专栏]:

    https://msdn.microsoft.com/en-us/library/ms141704.aspx

    如果您的列格式不正确(日期-月份-等...),您可以使用 substring 函数以正确的顺序/格式放置字符串:

    SUBSTRING(SSIS 表达式)- 返回字符表达式的一部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      相关资源
      最近更新 更多