Wie speichere ich Dezimalwerte in SQL Server?

272

Ich versuche, den dezimalen Datentyp einer Spalte in SQL Server herauszufinden. Ich muss in der Lage sein, Werte wie 15,5, 26,9, 24,7, 9,8 usw. Zu speichern

Ich decimal(18, 0)habe den Spaltendatentyp zugewiesen , kann diese Werte jedoch nicht speichern.

Was ist der richtige Weg, um dies zu tun?

Alex
quelle

Antworten:

513

DECIMAL(18,0) erlaubt 0 Nachkommastellen.

Verwenden Sie DECIMAL(18,4)stattdessen so etwas wie das sollte gut gehen!

Das ergibt insgesamt 18 Stellen , davon 4 nach dem Dezimalpunkt (und 14 vor dem Dezimalpunkt).

marc_s
quelle
@marc_s, Gibt es überhaupt einen Wert "4.5" zu speichern, bei dem der Spaltendatentyp dezimal (4,2) ist? Wenn ich den Wert einfüge, wird er auf "4.50" geändert
Arun
1
@ArunkumarTK: decimal(4,2)Ermöglicht 2 Stellen vor und 2 Stellen nach dem Dezimalpunkt. "4.5" kann problemlos gespeichert werden - und numerisch sind "4.5" und "4.50" identisch
marc_s
3
@ArunkumarTK: Warum sollten diejenigen unterschiedlich sein ?? Beide sind "viereinhalb" - der Wert ist der gleiche. Und NEIN verwenden Sie nicht a varchar, um einen Dezimalwert zu speichern !!
marc_s
1
Ich weiß, dass dies eine alte Diskussion ist, aber wäre das in diesem Fall nicht '4.05' und '4.5' @ArunkumarTK.
Shelby115
2
Ja, warum ist 18 so beliebt (z. B. die Standardeinstellung (18,0)), wenn sowohl 18 als auch 19 9 Byte verwenden ?
xr280xr
136

Sie sollten Folgendes verwenden:

DECIMAL(m,a)

m ist die Anzahl der Gesamtziffern, die Ihre Dezimalstelle haben kann.

a ist die maximale Anzahl von Stellen nach dem Dezimalpunkt.

http://www.tsqltutorials.com/datatypes.php enthält Beschreibungen für alle Datentypen.

DForck42
quelle
3
Es wird normalerweise als DECIMAL (p, s) bezeichnet, wobei p für Präzision (maximal zulässige Ziffern in einer Zahl) und s für Skalierung (maximal zulässige Ziffern nach dem Dezimalpunkt) steht.
RBT
Der Link ist tot
ibrahim mahrir
43

Die Einstellungen für Decimalsind Genauigkeit und Skalierung oder in normaler Sprache, wie viele Stellen eine Zahl haben kann und wie viele Stellen Sie rechts vom Dezimalpunkt haben möchten.

Also, wenn Sie PIin eine setzen Decimal(18,0), wird es als aufgezeichnet 3?

Wenn Sie PIin eine setzen Decimal(18,2), wird es als aufgezeichnet 3.14?

Wenn Sie PIin Decimal(18,10)aufgenommen werden als 3.1415926535.

Rubens Mariuzzo
quelle
35

Die meiste Zeit verwende ich Dezimal (9,2), was den geringsten Speicherplatz (5 Byte) im SQL-Dezimaltyp beansprucht.


Präzision => Speicherbytes

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

Es kann von 0 bis 9 999 999,99 (7 ​​Stellen vor + 2 Stellen hinter dem Dezimalpunkt = insgesamt 9 Stellen) gespeichert werden, was für die meisten Werte groß genug ist.

Hnin Htet Htet Aung
quelle
9

Sie können dies versuchen

decimal(18,1)

Die Länge der Zahlen sollte insgesamt 18 betragen. Die Länge der Zahlen nach dem Dezimalpunkt sollte nur 1 und nicht mehr betragen.

Biddut
quelle
6

In MySQL DB decimal(4,2)können nur insgesamt 4 Ziffern eingegeben werden. Wie Sie in sehen decimal(4,2), bedeutet dies, dass Sie insgesamt 4 Ziffern eingeben können, von denen zwei Ziffern nach dem Dezimalpunkt bleiben sollen.

Wenn Sie also 100.0 in die MySQL-Datenbank eingeben, wird ein Fehler wie "Wert außerhalb des Bereichs für Spalte" angezeigt.

Sie können also nur in diesen Bereich eingeben: von 00.00 bis 99.99.

Raja fertig
quelle
2
Warum ist dies relevant, während die Frage Microsoft SQL Server klar spezifiziert?
JCKödel
3

Die anderen Antworten sind richtig. Angenommen, Ihre Beispiele spiegeln die gesamte Bandbreite der gewünschten Möglichkeiten wider DECIMAL(3, 1). Oder DECIMAL(14, 1)erlaubt insgesamt 14 Ziffern. Es ist Ihre Aufgabe, darüber nachzudenken, was genug ist.

Matthew Flaschen
quelle
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)
freya
quelle