Share via


decimal und numeric (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-Endpunkt in Microsoft FabricWarehouse in Microsoft Fabric

Dezimal - und numerisch sind numerische Datentypen mit fester Genauigkeit und Skalierung. Dezimal und numerisch sind Synonyme und können austauschbar verwendet werden.

Argumente

Dezimalzahl [ ( p [ , s ] ) ] und numerische [ ( p [ , s ] ) ]

Zahlen mit fester Genauigkeit und mit fester Anzahl von Dezimalstellen. Wenn die maximale Genauigkeit verwendet wird, sind gültige Werte von -10^38 + 1 bis zu 10^38 - 1. Die ISO-Synonyme für Dezimalstellen sind dezimal und dez(p;s). Die Funktion von numeric ist mit der von decimal identisch.

p (Genauigkeit)

Die maximale Gesamtanzahl der zu speichernden Dezimalstellen. Diese Zahl schließt die Ziffern links und rechts des Dezimaltrennzeichens ein. Die Genauigkeit muss ein Wert zwischen 1 und der maximalen Genauigkeit von 38 sein. Die Standardgenauigkeit beträgt 18.

Hinweis

Informatica unterstützt unabhängig von der angegebenen Präzision und dem Dezimalstellenwert nur 16 signifikante Ziffern.

s (Dezimalstellenwert)

Die Anzahl von Dezimalstellen die rechts vom Dezimaltrennzeichen gespeichert werden. Diese Anzahl wird von p subtrahiert, um die maximale Anzahl der Stellen links von der Dezimalstelle zu bestimmen. Die Anzahl von Dezimalstellen muss ein Wert zwischen 0 und p sein und kann nur festgelegt werden, wenn die Genauigkeit angegeben wird. Die Standardskala lautet 0usw 0 <= s <= p. Die maximalen Speichergrößen variieren abhängig von der Genauigkeit.

Precision Speicherplatz in Bytes
1 – 9 5
10–19 9
20–28 13
29–38 17

Hinweis

Informatica (über den SQL Server PDW-Informatica-Connector verbunden) unterstützt unabhängig von der angegebenen Präzision und dem Dezimalstellenwert nur 16 signifikante Ziffern.

Konvertieren von Dezimal- und numerischen Daten

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

In Transact-SQLAnweisungen wird eine Konstante mit einem Dezimaltrennzeichen automatisch in einen Wert des numeric-Datentyps konvertiert. Hierbei werden die mindestens erforderliche Genauigkeit und die Anzahl von Dezimalstellen verwendet. Die Konstante 12.345 wird z. B. in einen numerischen Wert konvertiert, mit einer Genauigkeit von 5, und einer Skalierung von 3.

Konvertierung von Konvertierung in Konvertierungsrisiko
decimal und numeric float oder real Möglicher Genauigkeitsverlust
int, smallint, tinyint, float, real, money, or smallmoney decimal und numeric Möglicher Überlauf

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 die SET ARITHABORT Option dagegen lautet ON, löst SQL Server beim Überlauf einen Fehler aus. Eine Verringerung der Genauigkeit und der Anzahl von Dezimalstellen reicht zum Auslösen eines Fehlers nicht aus.

Vor SQL Server 2016 (13.x) ist die Konvertierung von Gleitkommawerten in Dezimal - oder numerische Werte nur auf Werte mit Genauigkeit von 17 Ziffern beschränkt. Jeder Float-Wert kleiner als 5E-18 (bei Verwendung der wissenschaftlichen Schreibweise oder 5E-18 der Dezimalnotation von 0.000000000000000005) rundet auf 0. Diese Einschränkung wird in SQL Server 2016 (13.x) und höheren Versionen nicht angezeigt.

Beispiele

Im folgenden Beispiel wird eine Tabelle mit decimal- und numeric-Datentypen erstellt. Werte werden in den einzelnen Spalten eingefügt. 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;

Hier ist das Resultset.

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