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

Respuestas:

213

prueba esto

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)
Chanoch
fuente
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.

Charles Bretana
fuente
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

AAA
fuente
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

Mohamed Ramadan
fuente
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

ClubbieTim
fuente
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
SonalPM
fuente
7

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

ROUND(column_name,decimals)
antoine
fuente
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
Anil Chaudhary
fuente
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
SQL Master
fuente
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;
kumar vishwash
fuente