【问题标题】:datetime2 truncate to the last full 30 minute perioddatetime2 截断到最后一个完整的 30 分钟时间段
【发布时间】:2021-04-29 20:41:14
【问题描述】:

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

非常感谢任何提示:)

【问题讨论】:

    标签: sql-server datetime2


    【解决方案1】:

    您可以使用以下技巧

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

    【讨论】:

    • 这太棒了。为了我自己的理智,我只是用DECLARE @RUN_DATE datetime2(1) = '2021-04-29 23:10:00.0';对其进行了验证,它按预期返回了23:00。谢谢!
    猜你喜欢
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    相关资源
    最近更新 更多