2012-10-18 44 views
2

我已經聲明瞭一個值爲23:59:59的時間變量。所以,我需要將它轉到24:00。你有什麼想法嗎?如何四捨五入一個SQL時間變量?

declare @t1 time = '23:59:59' 

這隻在select語句中是必需的。我知道時間不能作爲24:00插入。

http://msdn.microsoft.com/en-us/library/bb677243(v=sql.105).aspx

+0

這不會是一個演員,因爲24是另一種價值比23:59:59。 – driis

+0

很難說你應該做什麼,但不是這樣。 24 * 60 * 60,這將是我的第一個想法,然後與DateDiff進行時間比較將是我的第一個想法。 –

+2

24:00不是時候。時間數據類型將午夜存儲爲0:00:00。你究竟想要做什麼? –

回答

0

如何:

--setup 
    declare @t1 time = '23:59:59' 
    --declare @t1 time = '00:59:59' 
    --declare @t1 time = '00:59:29' 
    --declare @t1 time = '00:00:00' 

--solution for rounding to nearest hour 
    declare @temp1 int = datepart(minute, @t1)/30 
    set @temp1 = (DATEPART(hour, @t1) % 24) + @temp1 
    select @t1, cast(@temp1 as nvarchar(2)) + ':00' --not too worried about rpading hours since 1:00 makes sense 

--solution for rounding to nearest minute 
    declare @ss int = datepart(second, @t1)/30 
    , @mm int = datepart(minute, @t1) 
    , @hh int = datepart(hour, @t1) 
    , @oo nchar(2) = N'00' --used for padding 

    set @hh = (@hh + (@mm/30) * @ss) % 24 
    set @mm = (@mm + @ss) % 60 

    select @t1 
    , substring(@oo + cast(@hh as nvarchar(2)), case when @hh > 9 then 3 when @hh = 0 then 1 else 2 end, 2) --hours rpaded 
    + N':' 
    + substring(@oo + cast(@mm as nvarchar(2)), case when @mm > 9 then 3 when @mm = 0 then 1 else 2 end, 2) --minutes rpaded 
+1

或選擇'24:00' –

+0

@TonyHopkinson:給出這個問題的確如此,但我懷疑不是這個意圖。 – JohnLBevan