Comment stocker des valeurs décimales dans SQL Server?


273

J'essaie de comprendre le type de données décimal d'une colonne dans SQL Server. J'ai besoin de pouvoir stocker des valeurs comme 15,5, 26,9, 24,7, 9,8, etc.

J'ai attribué decimal(18, 0)au type de données de colonne mais cela ne me permet pas de stocker ces valeurs.

Quel est le bon moyen de le faire?

Réponses:


513

DECIMAL(18,0) autorisera 0 chiffre après le point décimal.

Utilisez DECIMAL(18,4)plutôt quelque chose comme ça qui devrait faire l'affaire!

Cela vous donne un total de 18 chiffres , dont 4 après le point décimal (et 14 avant le point décimal).


@marc_s, Existe-t-il de toute façon de stocker une valeur "4.5" où le type de données de la colonne est décimal (4,2)? Lorsque j'insère la valeur, elle est modifiée en "4,50"
Arun

1
@ArunkumarTK: decimal(4,2)autorise 2 chiffres avant et 2 chiffres après le point décimal. "4.5" peut être stocké sans problème - et numériquement, "4.5" et "4.50" sont identiques
marc_s

3
@ArunkumarTK: POURQUOI ceux-ci devraient-ils être différents ?? Les deux sont "quatre ans et demi" - la valeur EST LA MÊME . Et NON, n'utilisez pas de varcharpour stocker une valeur décimale !!
marc_s

1
Je sais que c'est une vieille discussion mais ne serait-ce pas «4.05» et «4.5» dans ce cas @ArunkumarTK.
Shelby115

2
Oui, pourquoi 18 est-il si populaire (par exemple, la valeur par défaut (18,0)) alors que 18 et 19 utilisent 9 octets ?
xr280xr

136

Vous devez utiliser est la suivante:

DECIMAL(m,a)

m est le nombre total de chiffres que peut contenir votre décimale.

a est le nombre maximum de chiffres que vous pouvez avoir après le point décimal.

http://www.tsqltutorials.com/datatypes.php a des descriptions pour tous les types de données.


3
Il est généralement noté DECIMAL (p, s) où p représente la précision (nombre maximum autorisé de chiffres dans un nombre) et s représente l'échelle (nombre maximum autorisé après le point décimal).
RBT

Le lien est mort
ibrahim mahrir

43

Les paramètres pour Decimalsont sa précision et son échelle ou dans une langue normale, le nombre de chiffres qu'un nombre peut avoir et le nombre de chiffres que vous souhaitez avoir à droite de la virgule décimale.

Donc, si vous mettez PIdans un, Decimal(18,0)il sera enregistré comme3 ?

Si vous en mettez PIun, Decimal(18,2)il sera enregistré comme3.14 ?

Si vous mettez PIen Decimal(18,10)être enregistré comme 3.1415926535.


35

Pour la plupart du temps, j'utilise décimal (9,2) qui prend le moins de stockage (5 octets) en type décimal sql.


Précision => octets de stockage

  • 1 - 9 => 5
  • 10-19 => 9
  • 20-28 => 13
  • 29-38 => 17

Il peut stocker de 0 à 9 999 999,99 (7 ​​chiffres devant + 2 chiffres derrière le point décimal = 9 chiffres au total), ce qui est assez grand pour la plupart des valeurs.


9

Vous pouvez essayer ceci

decimal(18,1)

La longueur des nombres doit être totalement 18. La longueur des nombres après la virgule décimale ne doit être que de 1 et pas plus.


6

Dans MySQL DB decimal(4,2)permet de saisir seulement un total de 4 chiffres. Comme vous le voyez decimal(4,2), cela signifie que vous pouvez saisir un total de 4 chiffres, dont deux sont destinés à être conservés après le point décimal.

Donc, si vous entrez 100.0 dans la base de données MySQL, il affichera une erreur comme "Valeur hors plage pour la colonne".

Ainsi, vous ne pouvez entrer que dans cette plage: de 00,00 à 99,99.


3
Pourquoi cela est-il pertinent alors que la question spécifie clairement Microsoft SQL Server?
JCKödel

3

Les autres réponses sont bonnes. En supposant que vos exemples reflètent la gamme complète des possibilités que vous voulez DECIMAL(3, 1). Ou, DECIMAL(14, 1)permettra un total de 14 chiffres. C'est votre travail de penser à ce qui est suffisant.


1
request.input("name", sql.Decimal, 155.33)              // decimal(18, 0)
request.input("name", sql.Decimal(10), 155.33)          // decimal(10, 0)
request.input("name", sql.Decimal(10, 2), 155.33)       // decimal(10, 2)
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.