Escreva um número com duas casas decimais SQL server

Respostas:

213

tente isso

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)
Chanoch
fonte
2
Se essa foi a resposta há 10 anos, não é mais. Este método transformaria 10.11111 em 10.00.
Jonathon Cowley-Thom
Eu tentei SELECT CONVERT (DECIMAL (10,2), 10.11111) ele retornou 10.11 mesmo resultado para SELECT CONVERT (DECIMAL (10,2), '10.11111') estava no Sql Server 2008 R2
SKCS Kamal
70

Use a Str()função. São necessários três argumentos (o número, o número total de caracteres a serem exibidos e o número de casas decimais a serem exibidas

  Select Str(12345.6789, 12, 3)

exibe: '12345.679' (3 espaços, 5 dígitos 12345, um ponto decimal e três dígitos decimais (679). - arredonda se for necessário truncar (a menos que a parte inteira seja muito grande para o tamanho total, nesse caso, são exibidos asteriscos.)

para um total de 12 caracteres, com 3 à direita do ponto decimal.

Charles Bretana
fonte
1
it rounds if it has to truncate... a menos que a parte inteira seja muito grande para o tamanho total, nesse caso, asteriscos serão exibidos. Isso é mencionado na documentação paraSTR . Aqui está uma citação dessa página:STR(1223,2) truncates the result set to **.
Mark Byers
36

Geralmente, você pode definir a precisão de um número no SQL, definindo-o com parâmetros. Na maioria dos casos, isso será NUMERIC(10,2)ou Decimal(10,2)- definirá uma coluna como um Número com 10 dígitos no total com uma precisão de 2 (casas decimais).

Editado para maior clareza

AAA
fonte
4
Também pode ser declarado como DECIMAL (10, 2).
jrcs3
10
Isso está errado por vários motivos. Não é um número, é numérico ou decimal. Você diz que numérico (10,2) permite 10 casas antes do ponto decimal, o que também está errado. numérico (10,2) permite um total de 10 dígitos com 2 casas após o ponto decimal. Intervalo = -99.999.999,99 para 99.999.999,99
George Mastros
@G Mastros: Parece que você está certo no ponto de precisão. Na nomeação real da convenção, em muitas implementações SQL, NUMBER é um tipo válido. Embora eu admita não saber o caso de sqlserver
AAA
@GMastros veio dizer a mesma coisa. msdn.microsoft.com/en-us/library/aa258832%28v=sql.80%29.aspx
Joe
19

Este trabalho para mim e sempre mantém frações de dois dígitos

23,1 ==> 23,10

25,569 ==> 25,56

1 ==> 1,00

Cast(CONVERT(DECIMAL(10,2),Value1) as nvarchar) AS Value2

Captura de tela do código

Mohamed Ramadan
fonte
2
tente a função STR () de Charles Bretana acima. Funciona como sua fórmula, mas fará o arredondamento no seu exemplo 25.569.
21711 JerryOL
15

É assim que as crianças estão fazendo isso hoje:

DECLARE @test DECIMAL(18,6) = 123.456789
SELECT FORMAT(@test, '##.##')

123,46

ClubbieTim
fonte
1
A função FORMAT está disponível a partir da versão 2012.
user1263981
ou: SELECT FORMAT (@test, '. ##')
java-love
Se os dados de entrada foram: DECLARE @test DECIMAL(18,6) = 0.456789 então SELECT FORMAT(@test, '##.##')retorna: .46 Como você consegue mostrar o zero inicial 0.46:?
luisdev
Para obter um 0 à frente, tente SELECT FORMAT (@test, '# 0. ##')
ClubbieTim
14

Se você precisar apenas de duas casas decimais, a maneira mais simples é ..

SELECT CAST(12 AS DECIMAL(16,2))

OU

SELECT CAST('12' AS DECIMAL(16,2))

Resultado

12.00
SonalPM
fonte
7

Se você está bem em arredondar o número em vez de truncá-lo, é apenas:

ROUND(column_name,decimals)
antoine
fonte
2

Tente o seguinte:

 declare @MyFloatVal float;

    set @MyFloatVal=(select convert(decimal(10, 2), 10.254000))

    select  @MyFloatVal

    Convert(decimal(18,2),r.AdditionAmount) as AdditionAmount
Anil Chaudhary
fonte
0

Multiplique o valor que você deseja inserir (por exemplo, 2,99) por 100

Em seguida, insira a divisão por 100 do resultado, adicionando 0,01 ao final:

299.01/100
Mestre SQL
fonte
0

Isso permitirá um total de 10 dígitos com 2 valores após o decimal. Isso significa que ele pode acomodar o valor antes de decimal até 8 dígitos e 2 após decimal.

Para validar, coloque o valor na seguinte consulta.

DECLARE vtest  number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;
kumar vishwash
fonte