2009-12-11 145 views
1

使用SQL Server 2005,我正在处理一个数据库,该数据库有两列来跟踪本质上是一个单一的DateTime的内容(而且我不能为我的数字生活找出为什么有人会认为这是一个好主意)。如何合并来自两个DateTime列(SQL Server)的数据?

基本上,一列,我们称之为OrderDate,包含一个DateTime,像这样:2008-02-29 00:00:00:00,而另一列OrderTime有这样一个列表:1900-01-01 11: 15:00.000

所以,现在我不得不将这两者结合起来,只要我想在一个地方显示整个日期和时间。从用户界面的角度来看,这很容易,但我如何在数据库级别执行此操作?我希望能够编写一个查询查找来自这两列的组合日期和时间之间的DATEDIFF,并将其与另一个DateTime值进行比较。

例:

SELECT DATEDIFF(mi, CompletionTime, OrderTime) AS TurnAroundTime FROM SomeRecord 

上述福利课程,OrderTime的日期组件是1900-01-01,导致略微倾斜结果的问题...

回答

1

在SQL中使用“OrderDate + OrderTime”来创建“OrderDateTime”。或者定义一个计算列。

SQL标准支持在日期时间上的标准添加,我相信,并且SQL Server实现它。

There is an example in BOL

+0

我还补充说,尽管他应该有绝对的把握这两列将永远不会有一个日期或时间,以及一个时间或日期的“作品”,分别。例如,他可以确定他在OrderTime中永远不会看到'1992-01-01 11:15:00.000'吗?在这种情况下,我建议在calc'd列中使用DATEPART()进行一些计算。 – 2009-12-11 20:29:05

2

创建一个计算列加在一起

Alter Table TableName Add CompleteDate as DateOnlyColName + TimeOnlyColName 

,以确保在DateOnlyColName错误的时间数据不inadvertenetly加入,用这个代替...

Alter Table TableName Add CompleteDate as 
     DateAdd(day, DateDiff(day, 0, DateOnlyColName), 0) + 
         TimeOnlyColName 
相关问题