向上或向下舍入到最接近的20

Har*_*ari 5 sql sql-server sql-server-2008

正如问题所示,我需要向上或向下舍入到最接近的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]
Run Code Online (Sandbox Code Playgroud)

Yuc*_*uck 5

试试这个:

DECLARE @testValue Int = 35;

SELECT
  CASE
    WHEN @testValue BETWEEN 0 AND 14 THEN 20
    ELSE ROUND((@testValue * 1.0) / 20, 0) * 20
  END MyRoundedValue;
Run Code Online (Sandbox Code Playgroud)

可能有更优化的方法,但这是第一个想到的解决方案.的* 1.0是迫使转换为浮点数,使得/ 20会产生分数的结果.结果使用舍入ROUND后再乘以20得到最终的"舍入"值.

编辑考虑你的特殊情况0-14......