Aqui estão três opções para converter um número inteiro em um valor decimal no SQL Server usando T-SQL.
O CAST() Função
O
CAST() função converte uma expressão de um tipo de dados para outro:SELECT CAST(275 AS DECIMAL(5, 2)); Resultado:
275.00
Neste exemplo, convertemos um inteiro (
275 ) para um valor decimal com precisão de 5 e com 2 casas decimais. Decimal e numérico são sinônimos e podem ser usados de forma intercambiável. Portanto, podemos ajustar nosso exemplo da seguinte forma para obter o mesmo resultado:
SELECT CAST(275 AS NUMERIC(5, 2)); Resultado:
275.00
É importante lembrar de ajustar a precisão conforme necessário:
SELECT CAST(18301275 AS DECIMAL(10, 2)); Resultado:
18301275.00
Se o argumento de precisão não for grande o suficiente, ocorrerá um erro:
SELECT CAST(18301275 AS DECIMAL(9, 2)); Resultado:
Msg 8115, Level 16, State 8, Line 1 Arithmetic overflow error converting int to data type numeric.
O CONVERT() Função
O
CONVERT() função faz a mesma coisa que CAST() , exceto com uma sintaxe ligeiramente diferente:SELECT CONVERT(DECIMAL(5, 2), 275); Resultado:
275.00
Use um operador aritmético
Outra opção é usar um operador aritmético, como um operador de multiplicação:
SELECT 275 * 1.00; Resultado:
275.00
Neste exemplo, multiplicamos o inteiro por
1.00 . No SQL Server, sempre que um operador combina expressões de diferentes tipos de dados, o tipo de dados com menor precedência é primeiro convertido no tipo de dados com maior precedência. A operação então retorna o tipo de dados do argumento com a precedência mais alta.
No SQL Server, decimal tem uma precedência mais alta para integer.
Ao multiplicá-lo por 1,00, não estamos alterando a parte inteira. Estamos simplesmente convertendo para decimal e adicionando a parte fracionária.
Consulte Precedência de Tipo de Dados no SQL Server para obter uma lista de tipos de dados em ordem de precedência.