在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
相关产品推荐
相关产品推荐

