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.