2017-02-22 102 views
0

當我通過下面的代碼計算時間差時,它顯示了相反順序的差異爲什麼?以小時計算時間差時出現意外結果?

declare @startdate time = '08:00:00', @enddate time = '01:00:00' 
declare @hour varchar(25),@minutes varchar(25),@seconds varchar(25) 

set @hour=datediff(ss,@startdate,@enddate)/60/60%12 
set @minutes= datediff(ss,@startdate,@enddate)/60%60 
set @seconds= datediff(ss,@startdate,@enddate)%60 

select @hour+':'[email protected]+':'[email protected] 

我正在計算12小時的差異。我期待的差別是5個小時。但它顯示我-7小時。有人可以解釋嗎?

回答

3

默認情況下,sql server採用24小時格式。 您可以指定它是A.M還是P.M.

declare @startdate time = '08:00:00 AM', @enddate time = '01:00:00 PM' 
SELECT DATEDIFF(HH,@startdate,@enddate) 

這個工作,如果指定的時間不涉及兩個不同的日期,除非提及。 例如:

declare @startdate time = '08:00:00 PM', @enddate time = '01:00:00 PM' 
    SELECT DATEDIFF(HH,@startdate,@enddate) 

這將導致一個錯誤的值作爲@enddate落在下一個日期。 爲了獲得更好的結果,建議指定日期和時間。

select datediff(HH, '02-21-2017 08:00:00 pm' ,'02-22-2017 01:00:00 PM') 
2

該輸出完全正確。 01:00在08:00後7小時。這就是爲什麼你得到一個負數。

你說你用12小時計算差值。好吧,那麼你需要以某種方式向SQL Server表明。可以使用13:00作爲結束時間,也可以在時間字符串中使用AMPM子午線指標解析日期。

高度建議你只處理24小時的時間。它會讓你頭痛不已,讓你的代碼更容易理解。節省UI層的時間顯示和解析。

+0

感謝您的澄清,但現在我正在採取startdate = '08:00:00 pm'和enddate = '01:00:00 pm'但仍然卡住相同的結果,即-7和輸出應該是17小時因爲時間從晚上8點到下午1點開始。爲什麼?使用12和24時鐘 –

+0

嘗試傳遞日期和時間。它應該產生你想要的結果。 – Vikram

+0

正確工作,謝謝 –