将日期时间四舍五入为四分之一分钟

Bla*_*eak 4 sql-server-2008

我有一个函数可以将日期时间四舍五入到最接近的一刻钟。但有没有一种方法可以向下舍入到最近的季度呢?

例子。

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
Run Code Online (Sandbox Code Playgroud)

这就是我现在要四舍五入到最近的四分之一的数字。

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

return @result
Run Code Online (Sandbox Code Playgroud)

Dan*_*eis 5

使用 SQL Server:

select cast( 
         FLOOR( cast( GetDate() as float)*(24*4)) / (24*4) 
       as smalldatetime) AS "datetime_quarter"
Run Code Online (Sandbox Code Playgroud)

策略是:

  • 将日期转换为浮点数,*24获取小时数,*4获取季度数
  • 向下舍入FLOOR
  • 转换回天数/(24*4)
  • 将天数转换为日期时间。smalldatetime用于避免浮动舍入问题。

这可以很容易地调整为使用ROUNDCEILING替代;或使用其他小时倍数代替4(季度)。