【问题标题】:SQL round down by significance (equivalent of excel's floor function)SQL 按重要性四舍五入(相当于 excel 的 floor 函数)
【发布时间】:2017-07-04 20:36:07
【问题描述】:

我需要在 SQL 中模仿 excel 的 FLOOR() 函数的东西。 SQL 的FLOOR() 函数只接受一个参数并向下舍入到最接近的整数。但我需要能够选择重要性,比如在 excel 的 FLOOR() 函数中。

示例:在 excel 中 FLOOR(6.03,.125) = 6.00FLOOR(6.63,.125) = 6.625 但到目前为止,在 SQL 中我已经尝试过 ROUND(6.63,.125)= 7.00ROUND(6.63,.125,1) = 6.00

有人知道我怎样才能实现我的目标吗?

【问题讨论】:

    标签: sql-server excel tsql ssms


    【解决方案1】:
    Declare @V float = 6.3
    Declare @F float = 0.125
    
    Select Floor(@V)+floor((@V-Floor(@V))/@F)*@F
    

    返回

    6.25
    

    编辑 - 如果需要 UDF

    CREATE Function [dbo].[udf-Stat-Round-To](@Value float,@Round float)
    Returns Float
    As
    Begin
    
    Return case when @Round=0 then NULL else Floor(@Value)+Floor((@Value-Floor(@Value))/@Round)*@Round end
    
    End
    -- Syntax Select [dbo].[udf-Stat-Round-To](10.13,.125) -- 10.125
    

    【讨论】:

    • 如果您摆脱 IIF,我会给您投票...我仍然在使用 Access 时做噩梦。公平贸易?
    • @SqlZim 完成。就个人而言,我对 IIF() 和/或大小写漠不关心。它们呈现相同的:)
    • 看起来不错!唯一的另一个问题是,如果使用内联 TVF 而不是标量,性能是否会更好。不过仍然是一个很好的解决方案。 +1
    • @SqlZim 无法想象 TVF 如何提高性能
    • @SqlZim SQLZim 创建了Scalar vs. Table-Value 函数的性能证明,结果最令人印象深刻rextester.com/JHKJZS29068
    猜你喜欢
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 2015-11-12
    • 1970-01-01
    相关资源
    最近更新 更多