sets sql

sets - SQL Server, división devuelve cero



grouping sets sql server (6)

Cuando usas solo enteros en una división, obtendrás una división entera. Cuando use (al menos uno) double o float, obtendrá la división de punto flotante (y la respuesta que desea obtener).

Así que puedes

  1. declarar una o ambas variables como flotante / doble
  2. lanzar una o ambas variables para flotar / duplicar.

No solo duplique el resultado de la división entera: la división ya se realizó como división entera, por lo que los números detrás del decimal ya están perdidos.

Aquí está el código que estoy usando en el ejemplo:

PRINT @set1 PRINT @set2 SET @weight= @set1 / @set2; PRINT @weight

Aquí está el resultado:

47 638 0

Me gustaría saber por qué devuelve 0 lugar de 0,073667712


En SQL Server, la división directa de dos enteros devuelve un entero aunque el resultado sea el float. Hay un ejemplo a continuación para transmitirlo:

--1-- declare @weird_number_float float set @weird_number_float=22/7 select @weird_number_float --2-- declare @weird_number_decimal decimal(18,10) set @weird_number_decimal=22/7 select @weird_number_decimal --3-- declare @weird_number_numeric numeric set @weird_number_numeric=22/7 select @weird_number_numeric --Right way declare @weird_number float set @weird_number=cast(22 as float)/cast(7 as float) select @weird_number

Solo el último bloque devolverá el 3,14285714285714. A pesar del segundo bloque definido con precisión correcta, el resultado será 3.00000.


O bien declarar set1 y set2 como flotantes en lugar de enteros o convertirlos en flotantes como parte del cálculo:

SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float);


Porque es un número entero. Debe declararlos como números de coma flotante o decimales, o enviarlos a los mismos en el cálculo.


Simplemente multiplique la parte inferior de la división por 1.0 (o tantos decimales como desee)

PRINT @set1 PRINT @set2 SET @weight= @set1 / @set2 *1.00000; PRINT @weight


si lo declaras como flotante o cualquier formato decimal, se mostrará

0

solamente

P.ej :

declare @weight float; SET @weight= 47 / 638; PRINT @weight

Salida: 0

Si quieres la salida como

0.073667712

P.ej

declare @weight float; SET @weight= 47.000000000 / 638.000000000; PRINT @weight