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

标签 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]

最佳答案

试试这个:

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/

相关文章:

sql - 根据特定项目出现的次数对表进行排序

sql-server - 如何在 R 中连接到 SQL Server 数据库

sql - 如果找到 USER,则选择最后一行

sql - 加入更新需要很长时间

sql - 仅当当前值大于先前值时 MSSQL 才会更新

sql - 交叉表查询提供了意外的结果

sql - 将多个表格结果复制到 Excel

jquery - 不断收到错误警告:PDOStatement::execute() 最多需要 1 个参数,2 个在 config.php 第 15 行中给出

sql-server - 为什么空格是 Sql Server 中的有效列名?

sql - 需要根据唯一 ID 按时间戳提取最新记录