我非常希望在分发一列已经在日期合在一起的列时添加今天的日期。有没有办法在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:mm
, H:mm
),因此您可以使用ssis package实现此目的,然后将vb.net脚本编写在其中以下内容:
- 创建
Flat File connection manager
和OLEDB Connection Manager
(源和目标) - 添加
DataFlow Task
- 在
DataFlow Task
中添加Flat File Source
,Script Component
,OLEDB Destination
- 您的数据流应该看起来像
Source --> Script --> Destination
- 在脚本组件中,将时间列标记为输入(假设其名称为
inTime
),并添加时间DT_DBTIMESTAMP
的输出列(ex: 在脚本中编写以下代码:(使用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
OutTime
)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;
}
}
在将时间值作为日期解析时,默认情况下将添加到今天的日期。
- 在
OLEDB Destination
地图OutTime
列到目标列