Genauigkeit, Dezimalstellen und Länge (Transact-SQL)
Die Genauigkeit gibt die Anzahl der Stellen einer Zahl an. Dezimalstellen sind die maximal speicherbare Anzahl von Stellen rechts vom Dezimaltrennzeichen. Die Zahl 123,45 hat z. B. eine Genauigkeit von 5 und 2 Dezimalstellen.
In SQL Server ist die maximale Standardgenauigkeit der Datentypen numeric und decimal 38. In früheren Versionen von SQL Server ist das Standardmaximum 28.
Die Länge für einen numerischen Datentyp ist die Anzahl der Bytes, die zum Speichern der Zahl verwendet werden. Die Länge für einen Zeichenfolgen- oder einen Unicode-Datentyp ist die Anzahl der Zeichen. Die Länge für die Datentypen binary, varbinary und image ist die Anzahl der Bytes. Ein int-Datentyp kann z. B. 10 Stellen enthalten, wird in 4 Bytes gespeichert und nimmt kein Dezimaltrennzeichen an. Der int-Datentyp hat eine Genauigkeit von 10 und eine Länge von 4. Er weist 0 Dezimalstellen auf.
Wenn zwei Ausdrücke vom Datentyp char, varchar, binary oder varbinary verkettet werden, ist die Länge des sich ergebenden Ausdrucks die Summe der Längen der beiden Ausgangsausdrücke, jedoch begrenzt auf 8.000 Zeichen.
Wenn zwei Ausdrücke vom Datentyp nchar oder nvarchar verkettet werden, ist die Länge des sich ergebenden Ausdrucks die Summe der Längen der beiden Ausgangsausdrücke, jedoch begrenzt auf 4.000 Zeichen.
Wenn zwei Ausdrücke vom selben Datentyp, aber mit verschiedenen Längen mit UNION, EXCEPT oder INTERSECT verglichen werden, ist die sich ergebende Länge die maximale Länge der beiden Ausdrücke.
Genauigkeit und Dezimalstellenanzahl der numerischen Datentypen außer decimal sind nicht veränderbar. Wenn ein arithmetischer Operator zwei Ausdrücke vom gleichen Typ verwendet, so ist das Ergebnis vom selben Datentyp; er hat die Genauigkeit und die Dezimalstellenanzahl, die für diesen Datentyp definiert sind. Wenn ein Operator zwei Ausdrücke mit verschiedenen numerischen Datentypen verwendet, bestimmen die Rangfolgeregeln für Datentypen den Datentyp des Ergebnisses. Das Ergebnis hat die für seinen Datentyp definierte Genauigkeit und Dezimalstellenanzahl.
Die folgende Tabelle definiert, wie Genauigkeit und Dezimalstellen des Ergebnisses berechnet werden, wenn das Ergebnis einer Operation vom Datentyp decimal ist. Das Ergebnis ist vom Datentyp decimal, wenn eine der folgenden Bedingungen zutrifft:
Beide Ausdrücke sind vom Datentyp decimal.
Ein Ausdruck ist vom Datentyp decimal, und der andere Ausdruck ist von einem Datentyp mit einer niedrigeren Rangfolge als decimal.
Die Operandenausdrücke werden als Ausdruck e1 mit der Genauigkeit p1 und der Dezimalstellenanzahl s1 und Ausdruck e2 mit der Genauigkeit p2 und der Dezimalstellenanzahl s2 bezeichnet. Die Genauigkeit und Dezimalstellenanzahl für einen Ausdruck, der nicht vom Datentyp decimal ist, entspricht der für den Datentyp des Ausdrucks definierten Genauigkeit und Dezimalstellenanzahl.
Operation |
Genauigkeit des Ergebnisses |
Dezimalstellen des Ergebnisses * |
---|---|---|
e1 + e2 |
max(s1, s2) + max(p1-s1, p2-s2) + 1 |
max(s1, s2) |
e1 - e2 |
max(s1, s2) + max(p1-s1, p2-s2) + 1 |
max(s1, s2) |
e1 * e2 |
p1 + p2 + 1 |
s1 + s2 |
e1 / e2 |
p1 - s1 + s2 + max(6, s1 + p2 + 1) |
max(6, s1 + p2 + 1) |
e1 { UNION | EXCEPT | INTERSECT } e2 |
max(s1, s2) + max(p1-s1, p2-s2) |
max(s1, s2) |
e1 % e2 |
min(p1-s1, p2 -s2) + max( s1,s2 ) |
max(s1, s2) |
* Das absolute Maximum für Genauigkeit und Dezimalstellen des Ergebnisses beträgt 38. Wenn die Genauigkeit des Ergebnisses 38 überschreitet, wird die zugehörige Dezimalstellenanzahl reduziert, um zu verhindern, dass der ganzzahlige Teil eines Ergebnisses abgeschnitten wird.