Alguém aqui pode aconselhar como adicionar um ponto decimal após o primeiro dígito ao selecionar o valor numérico do banco de dados?
Exemplo: A saída é 8250 deve ser 8,250
Eu tentei isso:
convert(decimal(10,3),ti.Rate/1000) AS Amount
mas a saída retorna o valor errado de 8.000
. Deve ser 8.250
.
Como todos os valores dentro da chamada convert são inteiros, ela está realizando uma divisão inteira para obter um resultado inteiro antes de converter para um decimal.
ti.Rate/1000
é 8250/1000 que com divisão inteira se torna 8.CONVERT
então muda o tipo mas a precisão extra já é perdida.Se você adicionar uma casa decimal ao literal numérico 1000, o SQL Server o verá como um número do tipo decimal/numérico em vez de um número inteiro, portanto, tudo o que você precisa fazer é
CONVERT(DECIMAL(10,3),ti.Rate/1000.0) AS Amount
. Dividir um inteiro por um decimal/numérico (ou vice-versa) resulta em um decimal/numérico.Na verdade, você provavelmente pode fazer isso
ti.Rate/1000.0 AS Amount
, a menos que precise especificamente que o tipo seja exatamenteDECIMAL(10,3)
em vez do padrão (um teste rápido no SQL2016 mostra que o padrão éNUMERIC(17,6)
, observe que numérico e decimal são funcionalmente idênticos, pois um é sinônimo do outro). Ou se você precisar especificamente deDECIMAL(10,3)
, poderá evitar conversões implícitas extras convertendo uma das entradas em vez da saída:CONVERT(DECIMAL(10,3),ti.Rate)/1000.0 AS Amount
(embora a diferença de desempenho aqui provavelmente seja na melhor das hipóteses infinitesimal).