正如问题所暗示的,我需要向上或向下舍入到最接近的 20,除了 0-14 的数字外,所有数字都必须舍入到 20,因为不允许零值。表格不必更新为新值。目前我只能向上或向下舍入到最接近的 100,如下所示:
CASE WHEN ROUND(number,-2)=0 THEN CAST(ROUND(number,-2)+100 AS DECIMAL(18, 0))
ELSE CAST(ROUND(number,-2) AS DECIMAL(18,0)) END AS [NUMBER]
最佳答案
试试这个:
DECLARE @testValue Int = 35;
SELECT
CASE
WHEN @testValue BETWEEN 0 AND 14 THEN 20
ELSE ROUND((@testValue * 1.0) / 20, 0) * 20
END MyRoundedValue;
可能有更优化的方法,但这是我想到的第一个解决方案。 * 1.0
是强制转换为 float ,这样/20
就会产生小数结果。使用 ROUND
对结果进行舍入,然后乘以 20
以获得最终的“舍入”值。
进行编辑以考虑 0-14
的特殊情况...
关于sql - 向上或向下舍入到最接近的 20,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8605007/