Reputation: 28838
Is it possible to easily round a figure up to the nearest 100 (or 1000, 500, 200 etc.) in SQL Server?
So:
720 -> 800
790 -> 800
1401 -> 1500
Upvotes: 66
Views: 161204
Reputation: 1
SELECT ROUND(Number,-2)
for rounding nearest hundredth positionSELECT ROUND(Number,-3)
for rounding nearest thousandth positionUpvotes: 0
Reputation: 1
try this code
round(yourvalue , -2)
Explaination=> when we mentioned -ve in round funtion it rounds the values and make zero Example=>round(1238283.9827398 ,-2) gives output=>1238300.0000000
Upvotes: 0
Reputation: 77
i have create a function in mssql it can help you
CREATE function dbo.roundup ( @numbr decimal(18,2), @frac decimal(18,2) ) RETURNS decimal(18,2) AS BEGIN DECLARE @result decimal(18,2) set @result = ceiling(@numbr/@frac)*@frac RETURN @result END GO
Upvotes: 0
Reputation: 1
Select round(value/100,0)*100
Whatever number you want to round to, just post that instead of 100
here.
Upvotes: 0
Reputation: 827
For rounding Up to the nearest thousand, try the following:-
select round(YourValue, -3)
Upvotes: 67
Reputation: 111
It works fine for integer value:
@roundUpValue = ((@intValue / 1000) + 1) * 1000
@roundDownValue = (@intValue / 1000) * 1000
For example
declare @intValue as int = 1934
select ((@intValue / 1000) + 1) * 1000 as roundUp
select (@intValue / 1000) * 1000 as roundDown
If you want to round up to the nearest 500 then
select ((@intValue / 500) + 1) * 500 as roundUp
Upvotes: 1
Reputation: 223
This will work for the values with decimal also.
select floor((ceiling (@value) + 99) / 100) * 100;
Upvotes: 1
Reputation: 1385
In addition to Gray's answer, I'd use the following inline function:
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
Parameter Definition:
using the function:
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
it can also be used as apply it versus a table such as:
;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*/
Upvotes: 0
Reputation: 37
It is very simple to round a number to any multiple of nearest 10 by using simply the ROUND
function
for ex:
SELECT ROUND(number/1000,2)*1000
This will give you the nearest thousandth value.
Upvotes: 4
Reputation: 29619
One option would be to use the CEILING() function like this:
SELECT CEILING(@value/100.0) * 100
You may need to convert your value to a decimal first depending on its type.
Upvotes: 35
Reputation: 427
A generic solution - Use MOD to find the last 100th place and then add 100 to the result.
select (720 - MOD(720,100)) + 100 from dual;
If you need the next 80th place, just replace any "100" with "80".
Upvotes: 0
Reputation: 91
Use CEILING function to round a figure up
DECLARE @Number DECIMAL, @RoundUp DECIMAL
SET @RoundUp = 100
SET @Number = 720
SELECT CEILING(@Number/@RoundUp)*@RoundUp
Upvotes: 9
Reputation: 116908
The following should work. After reading your question, I'm not exactly sure what you want 100 to return. For this 100 returns 100.
select floor((X + 99) / 100) * 100;
This gives the following results:
0 -> 0
1 -> 100
99 -> 100
100 -> 100
101 -> 200
Upvotes: 75
Reputation: 31848
You can use this code, assuming your amount
is an int. If not you will need to cast, so you get integer division.
If amount % 100 != 0 Then
roundedAmount = ((amount / 100) * 100) + 100
Else
roundedAmount = amount
You might want to package this into a user defined function.
Upvotes: 0
Reputation: 40359
There's no native function that will do this, but there are any number of simple math tricks that will. An example:
DECLARE @Foo int
SET @Foo = 720
print @Foo
print (@Foo + 100) % 100
PRINT @Foo - (@Foo + 100) % 100
Upvotes: 0