web-dev-qa-db-fra.com

Comment stocker des valeurs décimales dans SQL Server?

J'essaie de comprendre le type de données décimal d'une colonne dans SQL Server. Je dois pouvoir stocker des valeurs telles que 15.5, 26.9, 24.7, 9.8, etc.

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

Quel est le bon moyen de le faire?

263
Alex

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

Utilisez quelque chose comme DECIMAL(18,4) à la place, cela devrait suffire!

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

500
marc_s

Vous devriez utiliser est comme suit:

DECIMAL(m,a)

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

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.

131
DForck42

Les paramètres de Decimal correspondent à sa précision et à son échelle ou, en langage normal, au nombre de chiffres pouvant être compris dans un nombre et au nombre de chiffres souhaité à droite du point décimal.

Donc, si vous mettez PI dans une Decimal(18,0), il sera enregistré en tant que 3?

Si vous mettez PI dans une Decimal(18,2), il sera enregistré en tant que 3.14?

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

42
user99638

La plupart du temps, j'utilise decimal (9,2), qui prend le moins de mémoire (5 octets) en type décimal sql.


Precision => 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 en avant + 2 chiffres après la virgule = 9 chiffres au total), ce qui est suffisant pour la plupart des valeurs.

33

Tu peux essayer ça

decimal(18,1)

La longueur des nombres doit être au total de 18. La longueur des nombres après le point décimal doit être de 1 seulement et pas plus que cela.

7
Biddut

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

Ainsi, si vous entrez 100.0 dans la base de données MySQL, une erreur du type "Valeur hors plage pour la colonne" s'affichera.

Vous ne pouvez donc entrer que dans cette plage: de 00,00 à 99,99.

6
Raja Done

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

3
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)
0
freya