问题描述
我正在尝试创建一个四舍五入到最后完成的 30 分钟时间段的函数。我对 30 分钟的定义是每小时半小时(12、12:30、13、13:30 等)
因此,如果时间为 22:16
,我希望将其截断为 22:00
,但是,如果时间为 22:48
,我希望结果为 22:30
。
我已经测试过:
DECLARE @RUN_DATE datetime2(1) = GETDATE();
DECLARE @Rounded datetime2(1) = dateadd(hour,datediff(hour,dateadd(mi,@RUN_DATE)),0)
然而,这会将 22:38
舍入到 23:00
非常感谢任何提示:)
解决方法
您可以使用以下技巧
DECLARE @RUN_DATE datetime2(1) = GETDATE();
DECLARE @Rounded datetime2(1) = DATEADD(mi,DATEDIFF(mi,@RUN_DATE)/30*30,0)
select @rounded