Ecrire un nombre avec deux décimales SQL Server

Réponses:

213

essaye ça

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)
Chanoch
la source
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.

Charles Bretana
la source
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é

AAA
la source
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

Mohamed Ramadan
la source
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

ClubbieTim
la source
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
SonalPM
la source
7

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

ROUND(column_name,decimals)
Antoine
la source
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
Anil Chaudhary
la source
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
Maître SQL
la source
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;
kumar vishwash
la source