我有一个将日期时间舍入到最近的四分之一小时的功能。 但有没有一种方法可以向下舍入到最近的四分之一?
实施例
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,-@mm + (round(@mm/cast(15 as float),0)*15) , @dt )
return @result
答案 0 :(得分: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
用于避免浮动舍入问题。可以轻松调整以使用ROUND
或CEILING
代替;或使用其他小时倍数而不是4
(季度)。
答案 1 :(得分:0)
这是获取当前季度上限和下限的过程。
declare QUARTER_FLOOR datetime;
declare QUARTER_CEIL datetime;
declare CURRENT_DATETIME datetime;
declare CURRENT_MINUTE int;
// get current datetime without second and millisecond
SET CURRENT_DATETIME = dateformat(getdate(), 'YYYY-MM-DD hh:NN:00.000');
set CURRENT_MINUTE = datepart(minute,CURRENT_DATETIME); // get current minute
// GET CURRENT QUARTER FLOOR
set QUARTER_FLOOR = dateadd(minute, -CURRENT_MINUTE + (round(CURRENT_MINUTE/cast(15 as float),0)*15) , CURRENT_DATETIME );
// GET CURRENT QUARTER FLOOR
set QUARTER_CEIL = dateadd(minute, ((round(CURRENT_MINUTE/cast(15 as float),0)+1)*15) - CURRENT_MINUTE , CURRENT_DATETIME );
// RETURN
select QUARTER_FLOOR, QUARTER_CEIL;