将来自一个字段的日期与来自另一个字段的时间相结合 - SSIS

时间:2011-11-14 17:17:48

标签: sql-server ssis

我如何在SSIS中将这两个字段组合成一个datetime类型的列?两个源表都在datetime中,目标表也是如此。

Dates
2009-03-12 00:00:00.000 
2009-03-26 00:00:00.000 
2009-03-26 00:00:00.000 

 Times
1899-12-30 12:30:00.000 
1899-12-30 10:00:00.000 
1899-12-30 10:00:00.000 

2 个答案:

答案 0 :(得分:5)

您需要两个步骤才能实现目标。

1)首先将Dates和Times合并为一行。我猜你有一把钥匙将这两者联系起来,所以在合并连接转换中使用它(你需要在进入合并之前按此列排序)来创建一行,例如。

Merge Join Transformation

2)使用以下强制转换(DT_DBTIMESTAMP)(SUBSTRING((DT_WSTR,23)Dates,1,11) + SUBSTRING((DT_WSTR,23)Times,12,8))

将两列转换为派生列转换内的一列

这应该为您提供一个新的日期时间列,以便插入数据库,例如

Merge Join Example

答案 1 :(得分:0)

一种更整洁,更有效的方法来计算在日期中添加时间的派生列是使用以下表达式:

DATEADD("Ms",DATEDIFF("Ms",NULL(DT_DATE),[Time]),[Date])

这分为两部分:在内部,DATEDIFF("Ms",NULL(DT_DATE),[Time])计算[Time]超过null日期的时间(在这种情况下为1899-12-30 00:00:00) ,然后表达式的外部部分将该毫秒数添加到[Date],例如如果时间是01:00:00,即3,600,000毫秒,那么它最终会添加DATEADD("Ms",3600000,[Date]),或者在日期中添加一小时。