2013-03-05 182 views
5

我要time值添加到現有的SQL Server中使用T-SQL datetime值2012如何添加日期時間字段有時間字段

我想,DATEADD功能它可能是一個解決方案,但它是不...

也許我有某種方式time轉換爲datetime

所以不得不

開始日期2013年2月18日18:34:40.330(日期時間)

間隔00:11:00.0000000(時間)

結束日期? tsql? (日期時間)

任何線索?

回答

8

嘗試類似這樣的事情。注:我沒有采取毫秒這裏

declare @dt datetime = getdate() 
declare @t time = '01:35:45' 

select dateadd(second, 
        datepart(hour,@t) * 3600 + 
        datepart(minute,@t) * 60 + 
        datepart(second,@t), 
        @dt) 
22
DECLARE @d DATETIME = '2013-02-18T18:34:40.330', 
     @t TIME(7) = '00:11:00.0000000'; 

SELECT EndDate = DATEADD(SECOND, DATEDIFF(SECOND, 0, @t), @d); 

結果:現在

EndDate 
----------------------- 
2013-02-18 18:45:40.330 

,你真的不應該在time列存儲間隔time旨在表示時間點,而不是持續時間。當間隔> = 24小時時會發生什麼?您應該存儲事件的開始時間和結束時間(這些事情通常至少與持續時間相關),並且始終可以計算這些時間點的持續時間。

+0

感謝您的最後一段!是的,我存儲間隔<24小時。 – 2013-03-05 16:09:54

+3

但是,將間隔*作爲「時間」存儲的意義何在?爲什麼不儲存秒數? – 2013-03-05 16:10:57

+0

當我們有用戶直接輸入的靜態表格時,用時間來存儲是非常有益的,因此它更易於理解。使用DATEDIFF獲得秒數非常聰明。謝謝。 – 2013-10-20 16:12:11

2

我最近一直在使用Azure-DB,並嘗試下面的代碼。這並不在SQL 2012年工作 看到這個職位上SQL最新算術更多的信息: Difference in datetime and time arithmetic in Azure-DB vs. sql-server 2008R2

我有點遲到了,但由於明顯的方式做到這一點是缺少...

DECLARE @StartDate datetime 
DECLARE @Interval time 
DECLARE @EndDate datetime 
SET @StartDate = '2013-02-18 18:34:40.330' 
SET @Interval = '00:11:00.000000' 

SET @EndDate = @StartDate + @Interval 

SELECT @StartDate StartDate, @Interval Interval, @EndDate EndDate 

Output: 
StartDate     Interval    EndDate 
2013-02-18 18:34:40.330 00:11:00.0000000 2013-02-18 18:45:40.330 
相關問題