Sql server datetime2截断为最后一个完整的30分钟周期

Sql server datetime2截断为最后一个完整的30分钟周期,sql-server,datetime2,Sql Server,Datetime2,我正在尝试创建一个函数,该函数四舍五入到最后一个完成的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, 0, dateadd(mi,

我正在尝试创建一个函数,该函数四舍五入到最后一个完成的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, 0, dateadd(mi, 0, @RUN_DATE)), 0)
但是,这会将
22:38
循环到
23:00


非常感谢任何提示:)

您可以使用以下技巧

DECLARE @RUN_DATE datetime2(1) = GETDATE();
DECLARE @Rounded datetime2(1) = DATEADD(mi, DATEDIFF(mi, 0, @RUN_DATE)/30*30, 0)
select @rounded

这太棒了。为了我自己的理智,我刚刚用
声明@RUN_DATE time2(1)='2021-04-29 23:10:00.0'验证了它并按预期返回
23:00
。非常感谢。