是否可以轻松地将数字向上舍入到SQL Server中最近的100(或1000,500,200等)?
所以:
720 - > 800个
790 - > 800个
1401 - > 1500
答案 0 :(得分:47)
以下内容应该有效。在阅读了你的问题后,我不确定你想要100回归。为此100返回100。
select floor((X + 99) / 100) * 100;
这给出了以下结果:
0 -> 0
1 -> 100
99 -> 100
100 -> 100
101 -> 200
答案 1 :(得分:25)
对于四舍五入到最接近的千位,请尝试以下方法: -
select round(YourValue, -3)
干杯!!!!!
答案 2 :(得分:14)
答案 3 :(得分:8)
使用CEILING功能将数字向上舍入
DECLARE @Number DECIMAL, @RoundUp DECIMAL
SET @RoundUp = 100
SET @Number = 720
SELECT CEILING(@Number/@RoundUp)*@RoundUp
答案 4 :(得分:1)
试试这个:
选择回合(@value,-2);
答案 5 :(得分:0)
没有本机功能可以做到这一点,但是会有许多简单的数学技巧。一个例子:
DECLARE @Foo int
SET @Foo = 720
print @Foo
print (@Foo + 100) % 100
PRINT @Foo - (@Foo + 100) % 100
答案 6 :(得分:0)
您可以使用此代码,假设您的amount
是int。如果不是,你需要施放,所以你得到整数除法。
If amount % 100 != 0 Then
roundedAmount = ((amount / 100) * 100) + 100
Else
roundedAmount = amount
您可能希望将其打包成user defined function。
答案 7 :(得分:0)
通用解决方案 - 使用MOD查找最后的第100个位置,然后在结果中添加100个。
select (720 - MOD(720,100)) + 100 from dual;
如果您需要下一个第80位,只需更换任何" 100"用" 80"。
答案 8 :(得分:0)
使用ROUND
函数将数字舍入到最接近的10的任意倍数非常简单
例如:
SELECT ROUND(number/1000,2)*1000
这将为您提供最接近的千分之一值。
答案 9 :(得分:0)
除了Gray's回答, 我将使用以下内联函数:
CREATE FUNCTION dbo.udf_RoundNearest
(
@Number bigint,
@RoundNearest bigint,
@Direction int
)
RETURNS TABLE AS
RETURN
SELECT CASE WHEN @RoundNearest>=@Number THEN @Number
ELSE
(
(@Number + CASE
WHEN @Direction = 0 --Round Down
THEN 0
ELSE CASE WHEN @Number % @RoundNearest = 0 THEN 0 ELSE @RoundNearest END
END) / @RoundNearest) * @RoundNearest
END Number
参数定义:
使用函数:
SELECT * FROM dbo.udf_RoundNearest (1965,100,1) --> 2000
SELECT * FROM dbo.udf_RoundNearest (1359,100,0) --> 1300
SELECT * FROM dbo.udf_RoundNearest (1999,10,0) --1990
SELECT * FROM dbo.udf_RoundNearest (80,100,0) --> 80 (if the @number parameter is less or equal the @RoundNearest parameter the result will be the @number itself
它也可以用作表格 如:
;with tmp (Value) as
(select 1236 union all select 6584 union all select 9999)
select t.*, fn.Number
from tmp t
cross apply dbo.udf_RoundNearest (Value,100,0) fn
/*Result Set
Value Number
1236 1200
6584 6500
9999 9900*/
答案 10 :(得分:0)
这也适用于带小数的值。
select floor((ceiling (@value) + 99) / 100) * 100;
答案 11 :(得分:0)
这对我来说很好。
Round(@value/100, 0) * 100
答案 12 :(得分:0)
它对于整数值很好用:
@roundUpValue = ((@intValue / 1000) + 1) * 1000
@roundDownValue = (@intValue / 1000) * 1000
例如
declare @intValue as int = 1934
select ((@intValue / 1000) + 1) * 1000 as roundUp
select (@intValue / 1000) * 1000 as roundDown
如果您要舍入到最接近的500,则
select ((@intValue / 500) + 1) * 500 as roundUp