Escribe un número con dos decimales en el servidor SQL


Respuestas:


213

prueba esto

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)

2
Si esta fue la respuesta hace 10 años, ya no lo es. Este método convertiría 10.11111 en 10.00.
Jonathon Cowley-Thom

Intenté SELECT CONVERT (DECIMAL (10,2), 10.11111) me devolvió 10.11 mismo resultado para SELECT CONVERT (DECIMAL (10,2), '10.11111') que estaba en SQL Server 2008 R2
SKCS Kamal

70

Str()Función de uso Se necesitan tres argumentos (el número, el número total de caracteres para mostrar y el número de decimales para mostrar

  Select Str(12345.6789, 12, 3)

muestra: '12345.679' (3 espacios, 5 dígitos 12345, un punto decimal y tres dígitos decimales (679). - se redondea si tiene que truncarse (a menos que la parte entera sea demasiado grande para el tamaño total, en cuyo caso en su lugar se muestran asteriscos).

para un total de 12 caracteres, con 3 a la derecha del punto decimal.


1
it rounds if it has to truncate... a menos que la parte entera sea demasiado grande para el tamaño total, en cuyo caso se muestran asteriscos en su lugar. Esto se menciona en la documentación deSTR . Aquí hay una cita de esa página:STR(1223,2) truncates the result set to **.
Mark Byers

36

En general, puede definir la precisión de un número en SQL definiéndolo con parámetros. Para la mayoría de los casos, esto será NUMERIC(10,2)o Decimal(10,2)- definirá una columna como un Número con 10 dígitos totales con una precisión de 2 (lugares decimales).

Editado para mayor claridad


44
También se puede declarar como DECIMAL (10, 2).
jrcs3

10
Esto está mal por varias razones. No es un número, es numérico o decimal. Dices que numérico (10,2) permite 10 lugares antes del punto decimal, lo que también está mal. numérico (10,2) permite un total de 10 dígitos con 2 lugares después del punto decimal. Rango = -99999999.99 a 99999999.99
George Mastros

@G Mastros: Parece que tienes razón en el punto de precisión. En el nombre real de la convención, en muchas de las implementaciones de SQL, NUMBER es un tipo válido. Aunque admito que no conozco el caso de sqlserver
AAA


19

Esto funciona para mí y siempre mantiene fracciones de dos dígitos

23.1 ==> 23.10

25.569 ==> 25.56

1 ==> 1.00

Cast(CONVERT(DECIMAL(10,2),Value1) as nvarchar) AS Value2

Captura de pantalla de código


2
pruebe la función STR () de Charles Bretana arriba. Funciona como su fórmula, pero redondeará su ejemplo 25.569.
JerryOL

15

Así es como lo hacen los niños hoy:

DECLARE @test DECIMAL(18,6) = 123.456789
SELECT FORMAT(@test, '##.##')

123,46


1
La función FORMATO está disponible desde la versión 2012 en adelante.
user1263981

o: SELECCIONAR FORMATO (@test, '. ##')
java-love

Si los datos de entrada fueron: DECLARE @test DECIMAL(18,6) = 0.456789 luego SELECT FORMAT(@test, '##.##')devuelve: .46 ¿Cómo logra que muestre el cero inicial 0.46:?
luisdev

Para obtener un 0 inicial, intente SELECCIONAR FORMATO (@test, '# 0. ##')
ClubbieTim

14

Si solo necesita dos decimales, la forma más simple es ...

SELECT CAST(12 AS DECIMAL(16,2))

O

SELECT CAST('12' AS DECIMAL(16,2))

Salida

12.00

7

Si está bien redondeando el número en lugar de truncarlo, entonces es solo:

ROUND(column_name,decimals)

2

Prueba esto:

 declare @MyFloatVal float;

    set @MyFloatVal=(select convert(decimal(10, 2), 10.254000))

    select  @MyFloatVal

    Convert(decimal(18,2),r.AdditionAmount) as AdditionAmount

0

Multiplique el valor que desea insertar (ej. 2.99) por 100

Luego inserte la división por 100 del resultado agregando .01 al final:

299.01/100

0

Esto permitirá un total de 10 dígitos con 2 valores después del decimal. Significa que puede acomodar el valor del valor antes del decimal hasta 8 dígitos y 2 después del decimal.

Para validar, coloque el valor en la siguiente consulta.

DECLARE vtest  number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.