¿Cómo obtener un resultado flotante dividiendo dos valores enteros?

Me gustaría especificar el número de dígitos decimales cuando hago una división entre 2 números enteros como:

select 1/3 

Eso actualmente devuelve 0 . Me gustaría que devuelva 0,33 .

Algo como:

 select round(1/3, -2) 

Pero eso no funciona. ¿Cómo puedo lograr el resultado deseado?

Las sugerencias de stb y xiowl están bien si estás buscando una constante. Si necesita usar campos o parámetros existentes que sean enteros, primero puede convertirlos en flotantes:

 SELECT CAST(1 AS float) / CAST(3 AS float) 

o

 SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float) 

Porque SQL Server realiza una división de enteros. Prueba esto:

 select 1 * 1.0 / 3 

Esto es útil cuando pasa enteros como params.

 select x * 1.0 / y 

No es necesario echarles a ambos. El tipo de datos de resultado para una división es siempre el que tiene mayor precedencia de tipo de datos . Por lo tanto, la solución debe ser:

 SELECT CAST(1 AS float) / 3 

o

 SELECT 1 / CAST(3 AS float) 

utilizar

 select 1/3.0 

Esto hará el trabajo.

Podría ser un poco tarde, pero tenga en cuenta que CAST ing to FLOAT no está permitido en MySQL y generará un error cuando intente CAST(1 AS float) como se indica en MySQL dev .

La solución a esto es simple en MySQL. Solo haz

 (1 + 0.0) 

Luego use ROUND para alcanzar un número específico de decimales como este:

 ROUND((1+0.0)/(2+0.0), 3) 

El SQL anterior divide 1 por 2 y devuelve un flotante a 3 decimales, ya que sería 0.500 .

Parece que este truco funciona en SQL Server y es más corto (basado en respuestas anteriores)

 SELECT 1.0*MyInt1/MyInt2 

O:

 SELECT (1.0*MyInt1)/MyInt2 

Utilizar esta

select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result

Aquí en este sql, primero conviértase en flotar o multiplique por 1.00. La salida será un número flotante. Aquí considero dos decimales. Puedes elegir lo que necesitas.

Si vino aquí (al igual que yo) para encontrar la solución para el valor entero , aquí está la respuesta:

 CAST(9/2 AS UNSIGNED) 

devuelve 5