2011-01-29 62 views
32

En SQL, tengo col1 y col2. Ambos son enteros.Valores decimales en SQL para dividir los resultados

quiero hacer como:

select col1/col2 from tbl1 

consigo el resultado 1 donde col1=3 y col2=2

El resultado que quiero es 1.1

puse round(col1/col2,2). El resultado sigue siendo 1.

puse decimal(col1/col2,2). El decimal no está construido en función.

¿Cómo puedo hacer exactamente para obtener 1.1?

+1

¿es 3 dividido por 2 igual a 1.5? – bensiu

+0

Sí. es .. .. – william

+12

¿Qué tipo de redondeo te da 3/2 = 1.1? – Blorgbeard

Respuesta

24

Deberá convertir o convertir los valores a decimal antes de la división. Echar un vistazo a este http://msdn.microsoft.com/en-us/library/aa226054.aspx

Por ejemplo

DECLARE @num1 int = 3 DECLARE @num2 int = 2 

SELECT @num1/@num2 

SELECT @num1/CONVERT(decimal(4,2), @num2) 

El primer SELECT dará lugar a lo que se está viendo, mientras que el segundo SELECT tendrá la respuesta correcta 1.500000

3

Existen muchas otras formas para obtener el resultado deseado

Declare @a int 
Declare @b int 
SET @a = 3 
SET @b=2 
SELECT cast((cast(@a as float)/ cast(@b as float)) as float) 
10

SELECT CAST (col1 as float)/col2 FROM tbl1

Un elenco debería funcionar. ("Menos es más").

De Books Online:

devuelve el tipo de datos del argumento con la prioridad más alta. Para obtener más información acerca de la precedencia del tipo de datos, vea Data Type Precedence (Transact-SQL).

Si un número entero dividendo se divide por un número entero divisor, el resultado es un número entero que tiene alguna parte fraccionaria del resultado truncado

75

Sólo otro enfoque:

SELECT col1 * 1.0/col2 FROM tbl1 

Multiplicar por 1.0 convierte un número entero en flotantenumeric(13,1) y funciona como un tipo de transmisión, pero lo más probable es que sea más lento que eso.

Ventajas: menos prolijo.

+1

+1 buen enfoque;) – Somebody

+2

+100500;) También es posible usar sin cero SELECCIONE col1 * 1./ col2 DESDE tbl1 –

+1

+1 Enfoque mucho más fácil – Vandel212

1
CAST(ROUND(columnA *1.00/columnB, 2) AS FLOAT) 
+0

tanx mucho
obtener porcentaje de esta solución debe resultar * 100 :) –

Cuestiones relacionadas