2012-12-06 137 views
2

我有一個函數來將日期時間舍入到最近的四分之一小時。 但是有沒有辦法舍入到最接近的四分之一呢?舍入日期時間到四分鐘

例子。

08:14:00 becomes 08:00:00 
08:03:00 becomes 08:00:00 
08:29:00 becomes 08:15:00 
08:55:00 becomes 08:45:00 

這就是我現在四捨五入到最近的四分之一。

(
@dt datetime 
) 
returns datetime 
as 
begin 
declare @result datetime 
declare @mm int 
set @mm=datepart(minute,@dt) 
set @result = dateadd(minute,[email protected] + (round(@mm/cast(15 as float),0)*15) , @dt) 

return @result 
+1

爲什麼您的問題標記爲vb.net?在這裏我沒有看到VB的相關性 - 如果您要求可以在* VB *或* SQL中使用的解決方案,那麼您應該明確這一點。 –

+0

是的..對不起,你是對的。有沒有與VB的相關性..我已經刪除VB標籤..感謝指出.. – Bladefreak

回答

1

使用SQL Server:

select cast( 
     FLOOR(cast(GetDate() as float)*(24*4))/(24*4) 
     as smalldatetime) AS "datetime_quarter" 

的策略是:

  • 轉換日期爲浮點數,*24得到*4小時數,以獲得季度
  • 向下舍入FLOOR
  • 轉換回天數/(24*4)
  • 將天數轉換爲日期時間。 smalldatetime用於避免浮動舍入問題。

這可以很容易地調整爲使用ROUNDCEILING來代替;或使用其他小時倍數而不是4(季度)。

+0

謝謝!..這是非常有益的。 – Bladefreak

相關問題