Pregunta

¿Por qué la siguiente instrucción select devuelve dos valores diferentes?

declare @tempDec decimal
set @tempDec = 1.0 / (1.0 + 1.0)
select @tempDec, 1.0 / (1.0 + 1.0)
¿Fue útil?

Solución

Está bien para literales como 1.0, pero si extrae los datos de las columnas de la tabla, debe convertir / convertir el primer número evaluado en su ecuación:

convert(decimal, [col1]) / ([col2] + [col3])

-o-

convert(decimal(15, 2), [col1]) / ([col2] + [col3])

Otros consejos

Me enteré de un compañero de trabajo justo cuando publiqué esto.

Debe especificar la precisión y escala predeterminadas.

Esto funciona en este escenario: declarar @tempDec decimal (3,2)

Desde MSDN:

decimal [(p [, s])] y numérico [(p [, s])] Precisión fija y números de escala. Cuando se utiliza la máxima precisión, los valores válidos son de - 10 ^ 38 +1 a 10 ^ 38 - 1. Los sinónimos SQL-92 para decimal son dec y dec (p, s). numérico es funcionalmente equivalente a decimal.

p (precisión) El número total máximo de dígitos decimales que se pueden almacenar, tanto a la izquierda como a la derecha del punto decimal. La precisión debe ser un valor desde 1 hasta la precisión máxima de 38. La precisión predeterminada es 18.

s (escala) El número máximo de dígitos decimales que se pueden almacenar a la derecha del punto decimal. La escala debe ser un valor de 0 a p. La escala solo se puede especificar si se especifica la precisión. La escala predeterminada es 0; por lo tanto, 0 < = s < = p. Los tamaños máximos de almacenamiento varían según la precisión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top