sql-server – SSIS中的日期和时间格式

我有一个日期和时间格式:

Interval Start Time
1/13/16 1:30:00 
1/15/16 10:30:00

期望的结果

Interval Start Time
13/01/2016 13:30:00 (24 Hr)
15/01/2016 10:30:00

间隔时间为08:00至17:30.

我希望它是:13/01/2016 13:30和15/01/2016 10:30:00我设计了这个在SSIS派生列:

 (DT_DATE)(SUBSTRING([Interval Start Time],3,2) + "-" + 
 SUBSTRING([Interval Start Time],1,1) + "-" + 
 SUBSTRING([Interval Start Time],6,2) + " " +  
 SUBSTRING([Interval Start Time],9,1) == 1 ? "13" : 
 SUBSTRING([Interval Start Time],9,1) == 2 ? "14" :
 SUBSTRING([Interval Start Time],9,1) == 3 ? "15" : 
 SUBSTRING([Interval Start Time],9,1) == 4 ? "16" :  
 SUBSTRING([Interval Start Time],9,1) == 5 ? "17" : 
 "[Interval Start Time]" )
 + ":" + SUBSTRING([Interval Start Time],11,2))

我在SSIS中遇到的错误是:

…The expression might contain an invalid token, an incomplete token, or an invalid element…

而且我不确定这个公式是否正确,我想要它做什么.任何帮助将非常感激.

最佳答案 在此之前提出一个可能的解决方案之前,我希望您了解您的方法中的一些错误.使用这个requeriment的表达式是非常复杂和难以维护的,除了当你的Interval Start Time列的日期从10月(10)到12月(12)月时,你的字符串长度会改变,你的硬编码解决方案将通过SUBSTRING调用返回程序包运行时出现荒谬的数据并产生错误.

解决方案:使用脚本组件.

>创建源代码后,添加脚本组件并将源链接到它.
>通过在“输入列”选项卡中选择“脚本”组件,将其配置为包括“间隔开始时间”列.
>添加输出列,根据需要命名,然后选择数据库时间戳(DT_DBTIMESTAMP).
《sql-server – SSIS中的日期和时间格式》
>转到“脚本”选项卡,然后按“编辑脚本…”按钮.
>使用以下代码覆盖Input0_ProcessInputRow函数.

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    /*
    * Add your code here
    */
    var str_timestamp = Row.IntervalStartTime.ToString();
    string[] arr = str_timestamp.Trim().Split(' ');
    string[] date = arr[0].Split('/');
    string[] time = arr[1].Split(':');

    string formatedDate = "20" + date[2] + "-" + date[0].PadLeft(2, '0') + "-" + date[1].PadLeft(2, '0');
    int hour = Convert.ToInt32(time[0]);
    int hour_24 = hour < 8 ? hour + 12 : hour;
    formatedDate += " " + hour_24 + ":" + time[1] + ":" + time[2];

    Row.MyColumn = Convert.ToDateTime(formatedDate);

}

>在Row.MyColumn中,使用输出列的给定名称替换MyColumn.
>在Visual Studio中保存更改并关闭编辑器.

现在,您可以在Script组件之后添加目标,您将根据需要看到格式化的IntervalStartTime.

《sql-server – SSIS中的日期和时间格式》

如果这有帮助,请告诉我.

点赞