sábado, 21 de julio de 2012

SQL Server trunca divisiones de enteros

Pues eso, revisando una función que entre otras acciones divide dos números enteros (entiéndase dos datos de tipo int)descubrí que sql server trunca el resultado. Aunque esto está claramente documentado en los libros en pantalla me tomó por asalto. Esto puede resultar una verdadera catástrofe para aquellos novatos o algunos con un poquito mas de experiencia que nos descuidamos.
DECLARE @dividendo int, @divisor int

set @dividendo = 50;
set @divisor = 12;

SELECT (@dividendo/@divisor)
GO
El resultado para esta simple operación no es el deseado, puesto que retorna 4 en lugar de 4.166
DECLARE @dividendo int, @divisor int

set @dividendo = 50;
set @divisor = 12;

SELECT (cast(@dividendo as decimal(18,6))/cast(@divisor as decimal(18,6)))
GO
Ahora si obtenemos el dato que realmente necesitamos.
Saludos.

2 comentarios:

  1. tengo problemas divido dos valores tipo Decimal(27/13), al hacer la división de estos dos números, el resultado después de la coma solo muestra 11 decimales cuando debería mostrar 13 decimales.
    Alguna sugerencia ?

    ResponderEliminar
    Respuestas
    1. Quizá tu problema sea la precisión que asignas tanto las variables dividendo y divisor como a la variable resultado. Mira en el siguiente ejemplo indico que la variable @z tendrá un numero total de digitos seran 18 y solo 4 de esos corresponderán a los decimales despues de la coma.
      DECLARE @x DECIMAL, @y DECIMAL, @z DECIMAL(18,4)
      SET @x = 27;
      SET @y = 13;
      SET @z = @x/@y;
      SELECT @z;

      Si quieres tener 13 decimales entonces la variable de ser declarada así:
      DECLARE @z DECIMAL(18,13)

      Acá encuentras la información al respecto en msdn http://msdn.microsoft.com/es-es/library/ms187746.aspx

      Saludos.

      Eliminar