2016-08-23 30 views
2

如何在單個查詢中添加小時和分鐘?如何在單個查詢中添加小時和分鐘

我想這

Select DATEADD(hh,23.59,CAST('2016-07-08' AS DATETIME)) 

我需要廣告23小時59分鐘,但我的代碼只添加小時。爲什麼?

+0

DATEADD和23.59 * 60?或者在DATEADD上打兩個電話? (一個小時,一個分鐘) – MatBailie

+3

如果這是爲了定義一段時間的終點,你應該知道,計算一個獨佔終點通常非常容易*並且使用'<'而不是'<=' )而不是計算包含端點。例如。目前你打算在當天的最後一分鐘排除發生的任何事情嗎? –

回答

3

這個怎麼樣?

Select DATEADD(minute, 23*60 + 59, CAST('2016-07-08' AS DATETIME)) 

編輯:

如果你得到一個浮點/十進制值,如23.59,那麼你可以做:

Select DATEADD(minute, FLOOR(@hhmm) * 60 + (@hhmm - FLOOR(@hhmm)) * 100, CAST('2016-07-08' AS DATETIME)) 

注意:您還可以使用:

Select DATEADD(minute, FLOOR(@hhmm) * 60 + (@hhmm % 1) * 100, CAST('2016-07-08' AS DATETIME)) 

但我發現模數運算符的這種用法略微不合適。

+1

數學救援! –

+0

謝謝我試過這個如何分割來自數據庫23.59的浮點值,它會驗證它可以有任何值,如20,18.30 15.22我如何乘以小時部分像23 * 60並添加分鐘59 –

1

您還可以使用DATEADD()兩次:

Select DATEADD(minute,59,DATEADD(hh,23,CAST('2016-07-08' AS DATETIME))) 
1

datepart的說法,你的情況hh,是整數被添加到哪個日期的一部分。所以DATEADD函數只是忽略輸入的任何小數部分。

爲了得到結果,你想要的,你必須要麼使用DATEADD兩次,增加23小時,然後59分鐘,或一天添加到您的日期和減去1分,這樣的:

Select DATEADD(MI, -1, CAST('2016-07-08' AS DATETIME) + 1) 

另請參閱Microsoft's documentation on DATEADD

+0

謝謝託比,我編輯了我的答案,希望它回答他的問題。 – Oleg

0

另一種方法:你可以通過添加一天,然後分鐘。減去

輸出做的是同樣的

select DATEADD(minute, -1, DATEADD(DAY, 1,CAST('2016-07-08' AS DATETIME))) 
0

使用下面的代碼添加時間部分的日期。

SELECT DATEADD(Day, DATEDIFF(Day, 0, CAST('2016-07-08' AS DATETIME)), '23:59:00.000') 

enter image description here

微小
相關問題