sql-server - stuff - right sql server
Redondo*ARRIBA*a los 100 más cercanos en SQL Server (11)
Además de Gray''s respuesta Gray''s , usaría la siguiente función en línea:
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
Definición de parámetro:
- @Number: el número que necesitas redondear
- @RoundNearest 10º, 100º, 1000º, etc.
- @Dirección 0-> redondear hacia abajo , 1-> redondear hacia arriba
usando la función:
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
también se puede usar como aplicarlo frente a una tabla como:
;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*/
¿Es posible redondear fácilmente una cifra hasta los 100 (o 1000, 500, 200, etc.) más cercanos en SQL Server?
Asi que:
720 -> 800
790 -> 800
1401 -> 1500
Es muy simple redondear un número a cualquier múltiplo de los 10 más cercanos utilizando simplemente la función ROUND
para ex:
SELECT ROUND(number/1000,2)*1000
Esto le dará el milésimo valor más cercano.
Esto funcionará para los valores con decimal también.
select floor((ceiling (@value) + 99) / 100) * 100;
Lo siguiente debería funcionar Después de leer su pregunta, no estoy exactamente seguro de lo que quiere que devuelva 100. Por este 100 devuelve 100.
select floor((X + 99) / 100) * 100;
Esto da los siguientes resultados:
0 -> 0
1 -> 100
99 -> 100
100 -> 100
101 -> 200
No hay una función nativa que haga esto, pero hay muchos trucos matemáticos simples que lo harán. Un ejemplo:
DECLARE @Foo int
SET @Foo = 720
print @Foo
print (@Foo + 100) % 100
PRINT @Foo - (@Foo + 100) % 100
Para redondear hasta el millar más cercano, intente lo siguiente:
select round(YourValue, -3)
¡¡¡¡¡Aclamaciones!!!!!
Prueba esto:
seleccionar ronda (@value, -2);
Puede usar este código, suponiendo que su amount
sea un int. Si no, tendrás que lanzar, para obtener una división entera.
If amount % 100 != 0 Then
roundedAmount = ((amount / 100) * 100) + 100
Else
roundedAmount = amount
Es posible que desee empaquetar esto en una función definida por el usuario .
Una opción sería usar la función CEILING() como esta:
SELECT CEILING(@value/100.0) * 100
Es posible que deba convertir su valor a decimal primero según su tipo.
Una solución genérica: use MOD para encontrar el último lugar 100 y luego agregue 100 al resultado.
select (720 - MOD(720,100)) + 100 from dual;
Si necesita el próximo 80º lugar, simplemente reemplace cualquier "100" por "80".
Utilice la función de TECHO para redondear una figura
DECLARE @Number DECIMAL, @RoundUp DECIMAL
SET @RoundUp = 100
SET @Number = 720
SELECT CEILING(@Number/@RoundUp)*@RoundUp