You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SSIS中将dd-jun-yyyy hh:mm:ss格式字符串转换为日期格式

解决SSIS中DT-WSTR转TIMESTAMP(带英文月份缩写格式)的问题

这个问题我之前做SSIS项目时也踩过坑,默认的Data Conversion组件确实没法直接解析10-may-2013 10:05:00这种带英文月份缩写的日期格式,给你几个亲测有效的解决思路:

方法1:使用派生列组件(推荐,简单快捷)

SSIS的DATEPARSE函数支持自定义日期格式,完全能处理这种带月份缩写的场景。在派生列组件里新增一个列,表达式写:

DATEPARSE("dd-MMM-yyyy HH:mm:ss", [你的源日期列名])
  • 这里的MMM对应英文月份缩写(不管大小写,DATEPARSE会自动识别)
  • 如果你的环境默认文化不是英文,保险起见可以先把日期字符串转成统一格式,比如:
    DATEPARSE("dd-MMM-yyyy HH:mm:ss", UPPER([你的源日期列名]))
    

生成的派生列直接设置数据类型为DT_DBTIMESTAMP(对应TIMESTAMP)即可。

方法2:使用脚本组件(灵活性更高)

如果DATEPARSE函数因为环境文化等原因不生效,用脚本组件写代码解析更稳妥,以C#为例:

  1. 拖入脚本组件,选择“转换”类型,把源日期列作为输入列
  2. 添加一个输出列,数据类型设为DT_DBTIMESTAMP,比如命名为ParsedTimestamp
  3. 编辑脚本,在ProcessInputRow方法里写:
using System;
using System.Globalization;

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    // 先判断源列是否为空
    if (!Row.YourSourceDate_IsNull && !string.IsNullOrEmpty(Row.YourSourceDate))
    {
        DateTime parsedDate;
        // 指定解析格式和英文文化信息,避免非英文环境下解析失败
        if (DateTime.TryParseExact(
            Row.YourSourceDate, 
            "dd-MMM-yyyy HH:mm:ss", 
            CultureInfo.GetCultureInfo("en-US"), 
            DateTimeStyles.None, 
            out parsedDate))
        {
            Row.ParsedTimestamp = parsedDate;
        }
        else
        {
            // 解析失败时标记为空,也可以根据需求抛出错误
            Row.ParsedTimestamp_IsNull = true;
        }
    }
    else
    {
        Row.ParsedTimestamp_IsNull = true;
    }
}

替换代码里的YourSourceDate为你的实际源列名即可。

注意事项

  • 确保日期格式完全匹配:比如你的示例是dd-MMM-yyyy HH:mm:ss,如果实际数据有其他变体(比如月份缩写是大写MAY),格式字符串不用改,TryParseExact和DATEPARSE都能兼容大小写
  • 文化设置:如果SSIS运行在非英文系统上,一定要指定英文文化(比如en-US),否则月份缩写会解析失败

内容的提问来源于stack exchange,提问作者karDEVproj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:04:41