¿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.