datetime2 截断到最后一个完整的 30 分钟时间段

datetime2 truncate to the last full 30 minute period

我正在尝试创建一个四舍五入到最后完成的 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