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?
sql-server
sql-server-2008
division
rounding
LaBracca
fuente
fuente
Respuestas:
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:
o
fuente
decimal
Porque SQL Server realiza la división de enteros. Prueba esto:
Esto es útil cuando pasa enteros como parámetros.
fuente
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:
o
fuente
utilizar
Esto hará el trabajo.
fuente
Entiendo que
CAST
ing toFLOAT
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. Solo haz
Luego use
ROUND
para lograr un número específico de lugares decimales comoEl SQL anterior divide 1 por 2 y devuelve una coma flotante a 3 decimales, como sería
0.500
.Se pueden
CAST
los siguientes tipos: binario, char, fecha, fecha y hora, decimal, json, nchar, con signo, hora y sin signo .fuente
CAST
, simplemente no permite la transmisiónFLOAT
. Reparto a en suDECIMAL
lugar. Ver, por ejemplo, stackoverflow.com/questions/7368163/… .Parece que este truco funciona en SQL Server y es más corto (según las respuestas anteriores)
O:
fuente
SELECT 100.0 * @Elapsed / @Total
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.
fuente
Si vino aquí (como yo) para encontrar la solución para el valor entero , aquí está la respuesta:
devuelve 5
fuente