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

在SSIS中如何将带空格的文本格式DateTime转换为YYYY-MM-DD HH-MM-SS格式

SSIS文本格式DateTime转YYYY-MM-DD HH-MM-SS实现方案

首先明确转换规则:输入为日/月/年 时:分格式的文本类型日期,输出为年-月-日 时-分-00格式的文本,秒位统一补0。

实现方法

方法1:使用派生列组件(无代码轻量方案)

适合简单场景,不需要编写代码,直接在SSIS可视化界面配置即可:

  • 在数据流任务中添加派生列转换组件,和上游数据源节点建立连接
  • 新增自定义派生列,配置转换表达式如下,将表达式中[输入日期列]替换为你实际的输入列名:
(DT_WSTR,4)YEAR((DT_DATE)[输入日期列]) 
+ "-" + RIGHT("0" + (DT_WSTR,2)MONTH((DT_DATE)[输入日期列]),2) 
+ "-" + RIGHT("0" + (DT_WSTR,2)DAY((DT_DATE)[输入日期列]),2) 
+ " " + (DT_WSTR,2)DATEPART("Hh",(DT_DATE)[输入日期列]) 
+ "-" + RIGHT("0" + (DT_WSTR,2)DATEPART("Mi",(DT_DATE)[输入日期列]),2) 
+ "-00"
  • 可配置派生列的错误输出分支,用来处理格式非法的无效日期数据。

方法2:使用脚本组件(高稳定灵活方案)

不受服务器区域格式影响,适配性更强,适合复杂场景或存在大量特殊格式日期的情况:

  • 在数据流任务中添加脚本组件,选择「转换」类型,进入组件编辑器
  • 输入列选项卡:勾选你的输入日期列,设置为只读权限
  • 输入和输出选项卡:新增输出列,命名为格式化后日期,数据类型选择DT_WSTR,长度设置为20
  • 点击「编辑脚本」进入代码编辑界面,在Input0_ProcessInputRow方法中填入以下C#代码,替换对应列名即可:
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    // 若实际输入为月/日/年格式,将下面的d/M/yyyy改为M/d/yyyy即可
    if (DateTime.TryParseExact(Row.输入日期列.Trim(), "d/M/yyyy H:mm", 
        System.Globalization.CultureInfo.InvariantCulture, 
        System.Globalization.DateTimeStyles.None, out DateTime dt))
    {
        // 若需要小时补前导零,将H改为HH即可
        Row.格式化后日期 = dt.ToString("yyyy-MM-dd H-mm-00");
    }
    else
    {
        // 无效日期自定义处理逻辑,示例为设为空值,也可填入默认值
        Row.格式化后日期_IsNull = true;
    }
}
  • 保存代码关闭编辑器即可完成配置。

注意事项

  • 若你的输入日期为月/日/年格式,需要对应调整派生列的日月取值顺序,或脚本中的解析格式字符串
  • 若输出要求小时补前导零(如09-20-00而非9-20-00),将格式化字符串中的H替换为HH即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:36:02