una stuff right rellenar que izquierda invertir ejemplos ceros cadena sql-server math rounding

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:

  1. @Number: el número que necesitas redondear
  2. @RoundNearest 10º, 100º, 1000º, etc.
  3. @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