9/12/11

[tsql] División da resultado INTEGER y se requiere que dé DECIMAL

Este es otro pequeño tip para programadores :)

Si se han encontrado con este pequeño detalle al ejecutar una división en una consulta TSQL:

SELECT 25 / 3;

Resultado: 8

Y ustedes esperaban: 8.333

Pues la solución es bastante sencilla, ya que parte de la explicación a este comportamiento de TSQL (no lo he comprobado con Mysql).

TSQL retorna el resultado de la operación en el mismo formato o tipo de datos en que vienen todos los operandos. Por lo tanto, si dividimos dos números enteros, el resultado también será un entero. Precisamente aquí es donde TSQL hace su magia no requerida: aproxima hacia abajo cualquier decimal (por no decir que hace un TRUNCATE al número, dejándonos sólo con la parte entera -_-).

Por lo tanto, si queremos que el resultado nos muestre los decimales que corresponde, pues... ¡transforma tu número entero en un decimal! :D

SELECT 25.0 / 3;

Resultado: 8.333333
Voilà! ;D

Si tu número viene en una variable, pues conviértelo a decimal y ya está:

DECLARE @var INTEGER;
SET @var = 25;
SELECT CONVERT(FLOAT, @var) / 3;

Resultado: 8.3333333333333339
(es aún mejor: trae más decimalitos!! :P)

Esop!
Hasta pronto!
Publicar un comentario