【问题标题】:Converting a varchar timestamp (with possible single digit date or month) to datetime将 varchar 时间戳(可能是单个数字日期或月份)转换为日期时间
【发布时间】:2021-06-22 02:35:42
【问题描述】:

我必须使用 SSIS 将 varchar 中的时间戳(2021 年 3 月 12 日下午 1:38:53)转换为日期时间。这是我以前做的代码

(DT_DBDATE)(SUBSTRING(TimeStamp,FINDSTRING(TimeStamp,"/",2),4) + "-" + (LEN(SUBSTRING(TimeStamp,FINDSTRING(TimeStamp,"/",1),FINDSTRING(TimeStamp,"/",2)))==1?"0"+SUBSTRING(TimeStamp,FINDSTRING(TimeStamp,"/",1),FINDSTRING(TimeStamp,"/",2)):SUBSTRING(TimeStamp,FINDSTRING(TimeStamp,"/",1),FINDSTRING(TimeStamp,"/",2))) + "-" + (LEN(SUBSTRING(TimeStamp,1,FINDSTRING(TimeStamp,"/",1)))==1?"0"+SUBSTRING(TimeStamp,1,FINDSTRING(TimeStamp,"/",1)):SUBSTRING(TimeStamp,1,FINDSTRING(TimeStamp,"/",1))))

上面抛出了以下错误:

[派生列 [2]] 错误:尝试 执行类型转换。

我还需要包含时间,因为我的目标 SQL 列是 DATETIME2。

【问题讨论】:

    标签: datetime ssis datetime-format datetime-conversion


    【解决方案1】:

    无需手动解析方法:

    来自microsoft docs

    When a string is cast to a DT_DATE, or vice versa, the locale of the transformation is used.
    

    进入派生列高级设置并将 LocaleId 设置为适合您的日期源的值。 “English (United States)”的 LocaleId 应该根据您提供的示例起作用。

    然后利用 DT_DATE 进行解析,然后再将其转换为 DT_DBDATE

    (DT_DBDATE)((DT_DATE)TimeStamp)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 2016-11-26
      • 1970-01-01
      • 2017-12-12
      相关资源
      最近更新 更多