Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSIS中的日期和时间格式_Sql Server_Datetime_Ssis - Fatal编程技术网

Sql server SSIS中的日期和时间格式

Sql server SSIS中的日期和时间格式,sql-server,datetime,ssis,Sql Server,Datetime,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([Inter

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

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中遇到的错误是:

…表达式可能包含无效标记、不完整标记或无效元素


我也不确定这个公式在我想要它做的事情上是否正确。任何帮助都将不胜感激。

在这里介绍可能的解决方案之前,我希望您了解您的方法中的一些错误。使用此查询的表达式非常复杂且难以维护,此外,如果
Interval Start Time
列的日期为10月(10)至12月(12)个月,您的字符串长度将发生变化,并且在包运行时,通过
SUBSTRING
调用的硬编码解决方案将返回荒谬的数据并产生错误

解决方案:使用脚本组件

  • 创建源代码后,添加脚本组件并将源代码链接到它
  • 通过在
    输入列
    选项卡中选择脚本组件,将其配置为包含
    间隔开始时间
  • 添加一个输出列,根据需要命名,然后选择数据库时间戳(DT_DBTIMESTAMP)。
  • 转到脚本选项卡,然后按编辑脚本。。。按钮
  • 使用以下代码覆盖
    Input0\u 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);
    
    }
    
    public override void Input0\u ProcessInputRow(Input0Buffer行)
    {
    /*
    *在这里添加您的代码
    */
    var str_timestamp=Row.IntervalStartTime.ToString();
    字符串[]arr=str_timestamp.Trim().Split(“”);
    字符串[]date=arr[0]。拆分('/');
    字符串[]time=arr[1]。拆分(“:”);
    字符串formateDate=“20”+日期[2]+“-”+日期[0]。PadLeft(2,'0')+“-”+日期[1]。PadLeft(2,'0');
    整小时=转换为32(时间[0]);
    int HOURE_24=小时<8小时+12小时;
    格式化日期+=“+hour_24+”:“+time[1]+”:“+time[2];
    Row.MyColumn=Convert.ToDateTime(formateDate);
    }
    
  • Row.MyColumn
    中,将
    MyColumn
    替换为输出列的给定名称

  • 在Visual Studio中保存更改并关闭编辑器

  • 现在,您可以在脚本组件之后添加一个目标,您将根据需要看到格式化的IntervalStartTime


    让我知道这是否有用。

    最后一个括号“')是删除…
    子字符串([Interval Start Time],11,2))
    如@alex所说,删除最后一个括号,使其成为
    子字符串([Interval Start Time],11,2)
    ,但我认为您仍然会收到等式为
    ==1,==2的错误,==3…
    在比较字符串类型和数字类型时进行检查。此
    [Interval Start Time]
    存储为什么DBMS并存储在哪个DBMS中?此
    [Interval Start Time]
    的数据类型是什么?它是
    字符串
    还是
    日期时间
    类型?[间隔开始时间]的数据类型是字符串。谢谢您的操作系统设置为什么语言环境?