【问题标题】:How to Round a Time in T-SQL如何在 T-SQL 中舍入一个时间
【发布时间】:2008-10-30 10:53:58
【问题描述】:

我正在寻找一个可以接收时间并将其四舍五入到下一个/上一个小时/半小时/季度/分钟的函数。

【问题讨论】:

    标签: tsql rounding


    【解决方案1】:

    试试这个功能

    CREATE FUNCTION [dbo].[RoundTime] (@Time datetime, @RoundTo float)
    RETURNS datetime
    AS
    BEGIN
       DECLARE @RoundedTime smalldatetime
       DECLARE @Multiplier float
    
       SET @Multiplier= 24.0/@RoundTo
    
       SET @RoundedTime= ROUND(CAST(CAST(CONVERT(varchar,@Time,121) AS datetime) AS float) * @Multiplier,0)/@Multiplier
    
       RETURN @RoundedTime
    END
    
    
    
    select dbo.roundtime('13:15',0.5)
    

    第一个参数是四舍五入的时间,第二个参数将基于您的列表(0.5-半小时,1-一小时,...)

    【讨论】:

    • 如果你用 121 代替 113 它也会得到正确的日期部分
    • 不值得,增量必须指定为小数点的十进制表示法。因此,如果您希望将其四舍五入为 5 分钟间隔,则为一小时的 1/12,因此 @RoundTo 将是 0.083。
    • 谢谢,这很有帮助。为了避免自己计算浮点数的麻烦,您还可以像这样调用函数,以得到四舍五入到 5 分钟的结果: SELECT dbo.RoundTime('2016-11-28 10:57:50.000', CAST(5 AS float) / CAST(60 AS float)) 其中 5 是要舍入的分钟数,60 是一小时内的总分钟数(显然)。
    • 将此更新为“SET @Multiplier= 1440.0 /@RoundTo”允许您在 @RoundTo 参数中指定要舍入的分钟数。如果您想要最近的舍入时间您的输入时间,还可以考虑用 Ceiling() 替换 Round()
    【解决方案2】:

    非常感谢。我在线使用它来舍入到 15 分钟

    convert(smalldatetime,ROUND(cast(TDatalog.Time as float) * (24/.25),0)/(24/.25)) AS RoundedTime
    

    【讨论】:

      猜你喜欢
      • 2021-11-05
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多