¿Cómo obtener un resultado flotante dividiendo dos valores enteros usando T-SQL?


173

Usando T-SQL y Microsoft SQL Server, 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 regresa 0. Me gustaría que volviera 0,33.

Algo como:

select round(1/3, -2)

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


3
¿Has probado 1.0 / 3?
— Thilo

Las respuestas que obtuve son más que suficientes
— LaBracca

Respuestas:


277

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

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

o

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

O puede convertirlos como decimales, si desea un resultado decimal.
— Tim

30
SELECT 1.0 * MyInt1 / MyInt2
— Troglo

@TroubleZero para el uso de MySQLdecimal
— itsazzad

muchas gracias, me salvaste el día. Intenté CAST (7/3 AS float) pero devolví 2 nuevamente. Entonces los números de reparto se resuelven mi problema.
— Yasin Yörük

3
no es necesario emitir dividendos y divisores, consulte la respuesta de
— @MS

70

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

select 1 * 1.0 / 3

Esto es útil cuando pasa enteros como parámetros.

select x * 1.0 / y

1
Incluso puedes dejar de lado los ceros.
— John

43

No es necesario lanzar ambos. El tipo de datos de resultado para una división es siempre el que tiene mayor prioridad 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)

27

utilizar

select 1/3.0

Esto hará el trabajo.


13

Entiendo que CASTing to FLOATno 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. Solo haz

(1 + 0.0)

Luego use ROUNDpara lograr un número específico de lugares decimales como

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

El SQL anterior divide 1 por 2 y devuelve una coma flotante a 3 decimales, como sería 0.500.

Se pueden CASTlos siguientes tipos: binario, char, fecha, fecha y hora, decimal, json, nchar, con signo, hora y sin signo .


3
MySQL sí permite CAST, simplemente no permite la transmisión FLOAT. Reparto a en su DECIMALlugar. Ver, por ejemplo, stackoverflow.com/questions/7368163/… .
— markusk

7

Parece que este truco funciona en SQL Server y es más corto (según las respuestas anteriores)

SELECT 1.0*MyInt1/MyInt2

O:

SELECT (1.0*MyInt1)/MyInt2

2
Esto me gustó más, incluso se ve bien para los cálculos porcentuales:SELECT 100.0 * @Elapsed / @Total
— EliSherer

3

Utilizar este

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

Aquí, en este sql, primero convierta a flotante o multiplíquelo por 1.00. La salida será un número flotante. Aquí considero 2 decimales. Puedes elegir lo que necesitas.


2

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

CAST(9/2 AS UNSIGNED)

devuelve 5

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.