Freigeben über


decimal und numeric (Transact-SQL)

Numerische Datentypen mit fester Genauigkeit und fester Anzahl von Dezimalstellen.

Gilt für: SQL Server (SQL Server 2008 bis aktuelle Version), Windows Azure SQL-Datenbank (Ursprüngliche Version bis aktuelle Version).

Argumente

  • decimal [ **(**p[ **,**s] )] und numeric[ **(**p[ **,**s] )]
    Zahlen mit fester Genauigkeit und mit fester Anzahl von Dezimalstellen. Wenn maximale Genauigkeit verwendet wird, liegen gültige Werte zwischen - 10^38 +1 und 10^38 - 1. Die ISO-Synonyme für decimal sind dec und dec(p, s). numeric ist funktionell äquivalent zu decimal.

  • p (Precision = Genauigkeit)
    Die maximale Gesamtanzahl von Dezimalstellen, sowohl links als auch rechts vom Dezimalkomma, die gespeichert wird. Die Genauigkeit muss ein Wert zwischen 1 und der maximalen Genauigkeit von 38 sein. Die Standardgenauigkeit beträgt 18.

  • s (Dezimalstelle)
    Die Anzahl von Dezimalstellen rechts vom Dezimalkomma, die gespeichert wird. Diese Anzahl wird von p subtrahiert, um die maximale Anzahl der Stellen links vom Dezimalkomma zu bestimmen. Die maximal speicherbare Zahl an Dezimalstellen rechts vom Dezimalkomma. Der Dezimalstellenwert muss in einem Bereich zwischen 0 und p liegen. Der Dezimalstellenwert kann nur angegeben werden, wenn eine Genauigkeit angegeben ist. Der Standardwert ist 0; daher gilt: 0 <= s <= p. Die maximalen Speichergrößen variieren abhängig von der Genauigkeit.

    Genauigkeit

    Speicherplatz in Bytes

    1 - 9

    5

    10-19

    9

    20-28

    13

    29-38

    17

Konvertieren von decimal- und numeric-Daten

Im Fall der Datentypen decimal und numeric sieht SQL Server jede auftretende Kombination aus Genauigkeit und Anzahl der Dezimalstellen als einen anderen Datentyp an. decimal(5,5) und decimal(5,0) werden beispielsweise als verschiedene Datentypen erachtet.

In Transact-SQL-Anweisungen wird eine Konstante mit einem Dezimaltrennzeichen automatisch in einen Wert des numeric-Datentyps konvertiert; hierbei werden die mindestens erforderliche Genauigkeit und Anzahl von Dezimalstellen verwendet. Die Konstante 12.345 wird z. B. in einen numeric-Wert mit einer Genauigkeit von 5 und 3 Dezimalstellen konvertiert.

Beim Konvertieren von decimal oder numeric in float oder real kann ein Genauigkeitsverlust auftreten. Beim Konvertieren von int, smallint, tinyint, float, real, money oder smallmoney in decimal oder numeric kann ein Überlauf auftreten.

Bei der Konvertierung einer Zahl in einen Wert des Typs decimal oder numeric mit einer geringeren Genauigkeit und einer geringeren Anzahl von Dezimalstellen wird der Wert standardmäßig von SQL Server gerundet. Wenn allerdings die Option SET ARITHABORT auf ON festgelegt ist, löst SQL Server bei Auftreten eines Überlaufs einen Fehler aus. Eine Verringerung der Genauigkeit und der Anzahl der Dezimalstellen reicht zum Auslösen eines Fehlers nicht aus.

Beim Konvertieren von float- oder real-Werten in decimal oder numeric umfasst der decimal-Wert nie mehr als 17 Dezimalstellen. float-Werte < 5E-18 werden immer in 0 konvertiert.

Beispiele

Im folgenden Beispiel wird eine Tabelle mit decimal und numeric-Datentypen erstellt. Werte werden in jede Spalte eingefügt, und die Ergebnisse werden mithilfe einer SELECT-Anweisung zurückgegeben.

CREATE TABLE dbo.MyTable
(
  MyDecimalColumn decimal(5,2)
 ,MyNumericColumn numeric(10,5)

);

GO
INSERT INTO dbo.MyTable VALUES (123, 12345.12);
GO
SELECT MyDecimalColumn, MyNumericColumn
FROM dbo.MyTable;

Dies ist das Resultset.

MyDecimalColumn                         MyNumericColumn
--------------------------------------- ---------------------------------------
123.00                                  12345.12000

(1 row(s) affected)

Siehe auch

Verweis

ALTER TABLE (Transact-SQL)

CAST und CONVERT (Transact-SQL)

CREATE TABLE (SQL Server)

DECLARE @local\_variable (Transact-SQL)

SET @local\_variable (Transact-SQL)

sys.types (Transact-SQL)