Ecrire un nombre avec deux décimales SQL Server


Réponses:


213

essaye ça

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

2
Si c'était la réponse il y a 10 ans, ce n'est plus le cas. Cette méthode transformerait 10.11111 en 10.00.
Jonathon Cowley-Thom

J'ai essayé SELECT CONVERT (DECIMAL (10,2), 10.11111) il a renvoyé 10.11 même résultat pour SELECT CONVERT (DECIMAL (10,2), '10.11111') c'était dans Sql Server 2008 R2
SKCS Kamal

70

Utilisez la Str()fonction. Il faut trois arguments (le nombre, le nombre total de caractères à afficher et le nombre de décimales à afficher

  Select Str(12345.6789, 12, 3)

affiche: '12345.679' (3 espaces, 5 chiffres 12345, un point décimal et trois chiffres décimaux (679). - il arrondit s'il doit tronquer, (sauf si la partie entière est trop grande pour la taille totale, auquel cas des astérisques sont affichés à la place.)

pour un total de 12 caractères, avec 3 à droite de la virgule décimale.


1
it rounds if it has to truncate... sauf si la partie entière est trop grande pour la taille totale, auquel cas des astérisques sont affichés à la place. Ceci est mentionné dans la documentation deSTR . Voici une citation de cette page:STR(1223,2) truncates the result set to **.
Mark Byers

36

En règle générale, vous pouvez définir la précision d'un nombre en SQL en le définissant avec des paramètres. Dans la plupart des cas, ce sera NUMERIC(10,2)ouDecimal(10,2) - définira une colonne comme un nombre avec 10 chiffres au total avec une précision de 2 (décimales).

Édité pour plus de clarté


4
Il peut également être déclaré DECIMAL (10, 2).
jrcs3

10
Ceci est faux pour plusieurs raisons. Ce n'est pas un nombre, c'est numérique ou décimal. Vous dites que numérique (10,2) laisse 10 places avant la virgule décimale, ce qui est également faux. numeric (10,2) permet un total de 10 chiffres avec 2 places après la virgule décimale. Plage = -99999999,99 à 99999999,99
George Mastros

@G Mastros: Il semble que vous soyez sur le point de précision. Concernant la dénomination réelle de la convention, dans de nombreuses implémentations SQL, NUMBER est un type valide. Bien que j'admette ne pas connaître le cas de sqlserver
AAA

@GMastros est venu dire la même chose. msdn.microsoft.com/en-us/library/aa258832%28v=sql.80%29.aspx
Joe

19

Ce travail pour moi et garde toujours des fractions à deux chiffres

23,1 ==> 23,10

25,569 ==> 25,56

1 ==> 1,00

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

Capture d'écran du code


2
essayez la fonction STR () de Charles Bretana ci-dessus. Cela fonctionne comme votre formule mais arrondira sur votre exemple 25.569.
JerryOL

15

Voici comment les enfants le font aujourd'hui:

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

123,46


1
La fonction FORMAT est disponible à partir de la version 2012.
user1263981

ou: SELECT FORMAT (@test, '. ##')
java-love

Si les données d'entrée était: DECLARE @test DECIMAL(18,6) = 0.456789 alors les SELECT FORMAT(@test, '##.##')rendements: .46 Comment obtenez-vous pour montrer le zéro: 0.46?
luisdev le

Pour obtenir un 0 en tête, essayez SELECT FORMAT (@test, '# 0. ##')
ClubbieTim

14

Si vous n'avez besoin que de deux décimales, le moyen le plus simple est.

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

OU

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

Production

12.00

7

Si vous êtes d' accord d' arrondir le nombre au lieu de le tronquer, alors c'est juste:

ROUND(column_name,decimals)

2

Essaye ça:

 declare @MyFloatVal float;

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

    select  @MyFloatVal

    Convert(decimal(18,2),r.AdditionAmount) as AdditionAmount

0

Multipliez la valeur que vous souhaitez insérer (ex. 2,99) par 100

Insérez ensuite la division par 100 du résultat en ajoutant 0,01 à la fin:

299.01/100

0

Cela permettra un total de 10 chiffres avec 2 valeurs après la décimale. Cela signifie qu'il peut accepter la valeur de la valeur avant la décimale jusqu'à 8 chiffres et 2 après la décimale.

Pour valider, mettez la valeur dans la requête suivante.

DECLARE vtest  number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.