2012-07-20 137 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)

相關問題