问题 sql四舍五入到5的倍数?


您好我想知道有没有办法在SQL中舍入到5的倍数?

例如,如果我设置@Order = 8或9,这只会向上舍入到10,但当它为7或6时,它会向下舍入为5,我需要它在6或7时向上舍入到10。

declare @Order int

set @Order = 7

select round(cast(@Order as float)/cast(5 as float),0)*5

我需要

  • @Order = 1,2,3,4 最多可达5个
  • @Order = 6,7,8,9 最多可达10个
  • @Order = 11,12,13,14 最多可达15个

13141
2018-05-16 16:15


起源

重复的 stackoverflow.com/questions/15098090/rounding-up-tsql - John Sobolewski


答案:


使用CEILING功能

SELECT CEILING(@Order / 5.0) * 5

10
2018-05-16 16:18



不起作用。例如 select CEILING(2 / 5) * 5 产生 0 虽然它需要生产 5 - Yuriy Galanter
你需要做除数 Real 使这项工作。这个 SELECT CEILING(@Order / 5.) * 5 工作 - 添加点。 - Yuriy Galanter
它有效,谢谢你们。 - AxV


SELECT CEILING(@Order / 5.0) * 5

4
2018-05-16 16:23





如果您不想使用内置函数并避免使用 CASE 声明,看看这个:

select @Order, 5 * ((@Order+4) / 5)

前20个数字的结果将如下所示:

number      rounded
----------- -----------
1           5
2           5
3           5
4           5
5           5
6           10
7           10
8           10
9           10
10          10
11          15
12          15
13          15
14          15
15          15
16          20
17          20
18          20
19          20
20          20

2
2018-05-16 19:27





这是针对同一问题的另一种方法。

declare @num as int
set @num = 12

select @num + case when @num%5=0 then 0 else 5-(@num%5) end 

-1
2018-05-16 16:22



如果你投票,通常有助于说明原因。 - John Sobolewski