我有一个时间列表(hh,mm),我想使用SSIS将今天的日期(yyyy,mm,dd)集成到另一个csv文件中



我非常希望在分发一列已经在日期合在一起的列时添加今天的日期。有没有办法在SSI中执行此操作?知道该怎么做吗?

我想要(今天使用SQL和/或SSIS添加了今天的日期):

 OLEDB Table (datetime datatype):
 Date
 2017-03-11 09:00:00.000
 2017-03-11 10:00:00.000
 2017-03-11 13:45:00.000
 CSV Flat File (nvarchar(50)):
 Already have:
 Time
 9:00
 9:00
 9:00
 9:00
 9:30
 9:30
10:00
10:00
10:00
[Code]
 --Maybe something like this? Not sure how to make this work.
 GETDATE() +''+[Time]
[/Code]

任何想法都将受到极大的赞赏!

查看您在问题中提供的样本后,您的日期时间格式为( HH:mmH:mm),因此您可以使用ssis package实现此目的,然后将vb.net脚本编写在其中以下内容:

  1. 创建Flat File connection managerOLEDB Connection Manager(源和目标)
  2. 添加DataFlow Task
  3. DataFlow Task中添加Flat File SourceScript ComponentOLEDB Destination
  4. 您的数据流应该看起来像Source --> Script --> Destination
  5. 在脚本组件中,将时间列标记为输入(假设其名称为 inTime),并添加时间 DT_DBTIMESTAMP
  6. 的输出列(ex: OutTime
  7. 在脚本中编写以下代码:(使用vb.net)

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)  
        If Not Row.inTime_IsNull AndAlso _
           Not String.IsNullOrEmpty(Row.inTime.Trim) Then
            Row.OutTime = DateTime.ParseExact(Row.InTime.Trim,New String(){"HH:mm","H:mm"},New System.Globalization.CultureInfo("En-GB"), System.Globalization.DateTimeStyles.None)
        Else
            Row.OutTime_IsNull = True
        End If
    End Sub 
    

c#版本(使用的Telerik Converter)

   public override void Input0_ProcessInputRow(Input0Buffer Row)
    {

        if (!Row.inTime_IsNull && !string.IsNullOrEmpty(Row.inTime.Trim()))
        {
            Row.outTime = DateTime.ParseExact(Row.inTime.Trim(), new string[] {
                "HH:mm",
                "H:mm"
            }, new System.Globalization.CultureInfo("En-GB"), System.Globalization.DateTimeStyles.None);

        }
        else
        {
            Row.outTime_IsNull = true;
        }

}

在将时间值作为日期解析时,默认情况下将添加到今天的日期。

  1. OLEDB Destination地图OutTime列到目标列

最新更新