Usando o T-SQL e o Microsoft SQL Server, gostaria de especificar o número de dígitos decimais quando faço uma divisão entre 2 números inteiros, como:
select 1/3
Atualmente, isso retorna 0
. Eu gostaria que ele voltasse 0,33
.
Algo como:
select round(1/3, -2)
Mas isso não funciona. Como posso alcançar o resultado desejado?
sql-server
sql-server-2008
division
rounding
LaBracca
fonte
fonte
Respostas:
As sugestões de stb e xiowl são boas se você estiver procurando por uma constante. Se você precisar usar campos ou parâmetros existentes que sejam números inteiros, poderá convertê-los para serem flutuadores primeiro:
ou
fonte
decimal
Porque o SQL Server executa divisão inteira. Tente o seguinte:
Isso é útil quando você passa números inteiros como parâmetros.
fonte
Não é necessário lançar os dois. O tipo de dados do resultado para uma divisão é sempre aquele com maior precedência . Assim, a solução deve ser:
ou
fonte
usar
Isso fará o trabalho.
fonte
Eu entendo que
CAST
o INGFLOAT
não é permitido em MySQL e irá gerar um erro quando você tentaCAST(1 AS float)
conforme indicado no MySQL desenv .A solução alternativa para isso é simples. Apenas faça
Em seguida, use
ROUND
para obter um número específico de casas decimais, comoO SQL acima divide 1 por 2 e retorna um valor flutuante para 3 casas decimais, como seria
0.500
.Pode-
CAST
se os seguintes tipos: binário, char, data, data e hora, decimal, json, nchar, assinado, hora e não assinado .fonte
CAST
, apenas não permite a transmissãoFLOAT
. Transmitir para emDECIMAL
vez disso. Consulte, por exemplo, stackoverflow.com/questions/7368163/… .Parece que esse truque funciona no SQL Server e é mais curto (com base nas respostas anteriores)
Ou:
fonte
SELECT 100.0 * @Elapsed / @Total
Usa isto
select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result
Aqui, neste sql, converta primeiro para flutuar ou multiplique por 1,00. Qual saída será um número de flutuação. Você pode escolher o que precisa.
fonte
Se você veio aqui (assim como eu) para encontrar a solução para o valor inteiro , aqui está a resposta:
retorna 5
fonte