formato - round sql server ejemplos



Lugares decimales truncados(no redondos) en SQL Server (11)

¿Quieres el decimal o no?

Si no, usa

select ceiling(@value),floor(@value)

Si lo haces con 0, entonces haz una ronda:

select round(@value,2)

https://ffff65535.com

Estoy tratando de determinar la mejor manera de truncar o eliminar decimales adicionales en SQL sin redondear. Por ejemplo:

declare @value decimal(18,2)

set @value = 123.456

Esto redondeará automáticamente @Value para que sea 123.46 .... que en la mayoría de los casos es bueno. Sin embargo, para este proyecto no necesito eso. ¿Hay una manera simple de truncar los decimales que no necesito? Sé que puedo usar la función left () y convertir de nuevo a un decimal ... de alguna otra manera?


Creo que solo quieres el valor decimal, en este caso puedes usar lo siguiente:

declare @val decimal (8, 3)
SET @val = 123.456

SELECT @val - ROUND(@val,0,1)

Esta es la forma en que pude truncar y no redondear:

select 100.0019-(100.0019%.001)

devuelve 100.0010

Y tu ejemplo:

select 123.456-(123.456%.001)

devuelve 123.450

Ahora, si quieres deshacerte del cero final, simplemente cállalo:

select cast((123.456-(123.456%.001)) as decimal (18,2))

devuelve 123.45


Esto eliminará la parte decimal de cualquier número

SELECT ROUND(@val,0,1)

Otra forma es la función ODBC TRUNCATE :

DECLARE @value DECIMAL(18,3) =123.456;

SELECT @value AS val, {fn TRUNCATE(@value, 2)} AS result

LiveDemo

Salida:

╔═════════╦═════════╗
║   val   ║ result  ║
╠═════════╬═════════╣
║ 123,456 ║ 123,450 ║
╚═════════╩═════════╝

Observación:

Recomiendo usar la función ROUND incorporada con el 3er parámetro establecido en 1.


Otro truncado sin solución de redondeo y ejemplo.

    Convert 71.950005666 to a single decimal place number (71.9)
    1) 71.950005666 * 10.0 = 719.50005666
    2) Floor(719.50005666) = 719.0
    3) 719.0 / 10.0 = 71.9

    select Floor(71.950005666 * 10.0) / 10.0

Sé que esta pregunta es muy antigua, pero nadie usó cadenas secundarias para redondear. Esto como ventaja la capacidad de redondear números realmente largos (límite de su cadena en el servidor SQL que suele ser de 8000 caracteres):

SUBSTRING('123.456', 1, CHARINDEX('.', '123.456') + 2)

Sé que esto es bastante tarde, pero no lo veo como una respuesta y he estado usando este truco durante años.

Simplemente reste .005 de su valor y use Round (@ num, 2).

Tu ejemplo:

declare @num decimal(9,5) = 123.456

select round(@num-.005,2)

devuelve 123.45

Automáticamente ajustará el redondeo al valor correcto que está buscando.

Por cierto, ¿estás recreando el programa de la película Office Space?


ROUND ( 123.456 , 2 , 1 )

Cuando el tercer parámetro ! = 0 , trunca en lugar de redondear

http://msdn.microsoft.com/en-us/library/ms175003(SQL.90).aspx

Sintaxis

ROUND (numeric_expression, length [, function])

Argumentos

  • numeric_expression Es una expresión de la categoría de tipo de datos numéricos exactos o aproximados numéricos, a excepción del tipo de datos de bit.

  • length Es la precisión a la que debe redondearse numeric_expression. length debe ser una expresión de tipo tinyint, smallint o int. Cuando length es un número positivo, numeric_expression se redondea al número de posiciones decimales especificado por la longitud. Cuando length es un número negativo, numeric_expression se redondea en el lado izquierdo del punto decimal, según lo especificado por la longitud.

  • función Es el tipo de operación a realizar. la función debe ser tinyint, smallint o int. Cuando la función se omite o tiene un valor de 0 (predeterminado), numeric_expression se redondea. Cuando se especifica un valor distinto de 0, numeric_expression se trunca.

SELECT Cast(Round(123.456,2,1) as decimal(18,2))

select round(123.456, 2, 1)




rounding