Escreva um número com duas casas decimais SQL server


Respostas:


213

tente isso

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)

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.


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


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


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


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


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

7

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

ROUND(column_name,decimals)

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

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

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;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.