2012-07-20 89 views
1

说,我有两个DATETIME2列,我需要选择两者之间的日期。例如:2012年1月1日08:00和2012年1月1日09:00将产生2012年1月1日08:30。一种在t-SQL中选择两个日期之间的日期的方法

我想这一点:

SELECT CAST((CAST(dtOut AS float(53)) + 
     CAST(dtIn AS float(53)))/2 AS DATETIME2) FROM t; 

,但我得到的是从DATETIME2显式转换是不允许的错误。

任何想法如何做到这一点?

回答

3

DateDiff会找到两个日期之间的差异。

select Dateadd(n, DATEDIFF(n, dtIn, dtOut)/2, dtIn) FROM t 

顺便说一句,如果字段是datetime而不是datetime2,那么你的方法就可以工作。

+0

非常感谢!虽然很快,但是n,秒,分钟的最佳选择是什么? – ahmd0 2012-07-20 08:18:07

+0

n表示分钟数。如果您需要秒精度,请使用ss - 取决于您的要求 - 请参阅此处的选项http://msdn.microsoft.com/en-us/library/ms189794.aspx – podiluska 2012-07-20 08:22:14

+0

谢谢。我想,秒可能会导致算术超限,所以我应该坚持与分钟或许... – ahmd0 2012-07-20 08:24:51

0

试试这个。

select Dateadd(n, DATEDIFF(n, '1/1/2012 08:00', '1/1/2012 09:00')/2, '1/1/2012 08:00'); 
0
declare @d1 datetime2, @d2 datetime2 
select @d1='1/1/2012 08:00',@d2='1/1/2012 09:00' 
select dateadd(minute,datediff(minute ,@d1,@d2)/2.0,@d1) 
0

选择DATEADD(SECOND,DATEDIFF(SECOND,dtIn,dtOut)/2.0,dtIn)

相关问题