miércoles, 1 de septiembre de 2010

Evitar redondeo automático en SQL

Últimamente he tenido un problema con el redondeo utilizando el operador división (/) en una consulta de SQL, para el origen de datos de un informe en un proyecto Microsoft Access Project (.adp)

El problema es que al dividir dos enteros me trunca de forma automática el resultado. La explicación al problema esta en http://technet.microsoft.com/en-us/library/ms175009.aspx. Básicamente es que cuando el divisor y el dividendo son enteros el resultado lo convierte a entero.

La solución es sencilla, convertir uno de los dos operando a float o a real con CAST para que el operador “/” no convierta el resultado a entero. La conversión  hay que hacerla de uno de los operandos y no del resultado, ya que la división ya lo devuelve truncado y aunque lo conviertas no va a haber cambios

Información sobre CAST en http://technet.microsoft.com/en-us/library/aa226054(SQL.80).aspx

Por ejemplo. Si tenemos una tabla tbventas con una columna impVenta  y otra nArtículos de tipo entero si queremos que nos devuelva los decimales tendría que ser así:
Select CAST(impVenta as float)/cArticulos as valorMedio
from tbventas

No hay comentarios:

Publicar un comentario