

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Numerische Typen
<a name="Numeric_types"></a>

Numerische Datentypen sind Ganzzahlen, Dezimalzahlen und Gleitkommazahlen. 

**Topics**
+ [Ganzzahl-Typen](Numeric_types-integer-types.md)
+ [Typ DECIMAL oder NUMERIC](Numeric_types-decimal-or-numeric-type.md)
+ [Gleitkommazahl-Typen](Numeric_types-floating-point-types.md)
+ [Berechnungen mit numerischen Werten](Numeric_computations.md)

# Ganzzahl-Typen
<a name="Numeric_types-integer-types"></a>

Verwenden Sie die folgenden Datentypen, um ganze Zahlen verschiedener Bereiche zu speichern. Sie können keine Werte außerhalb des zulässigen Bereichs für jeden Typ speichern. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/clean-rooms/latest/sql-reference/Numeric_types-integer-types.html)

# Typ DECIMAL oder NUMERIC
<a name="Numeric_types-decimal-or-numeric-type"></a>

Verwenden Sie den Datentyp DECIMAL oder NUMERIC, um Werte mit *benutzerdefinierter Genauigkeit* zu speichern. Die Schlüsselwörter DECIMAL und NUMERIC können synonym verwendet werden. In diesem Dokument wird der Begriff *dezimal* für diesen Datentyp bevorzugt. Der Begriff *numerisch* wird in der Regel als Oberbegriff für Ganzzahl-, Dezimalzahl- und Gleitkommazahl-Datentypen verwendet. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/clean-rooms/latest/sql-reference/Numeric_types-decimal-or-numeric-type.html)

Definieren Sie eine DECIMAL-Spalte in einer Tabelle, indem Sie ein *precision* und angeben*scale*: 

```
decimal(precision, scale)
```

 *precision*   
Die Anzahl aller signifikanten Stellen im gesamten Wert: die Anzahl der Stellen auf beiden Seiten des Dezimaltrennzeichens. Die Zahl `48.2891` hat z. B. eine Genauigkeit von 6 und 4 Dezimalstellen. Wenn Sie nichts angeben, wird standardmäßig eine Genauigkeit von 18 verwendet. Die maximale Genauigkeit ist 38.  
 Wenn die Anzahl der Ziffern links vom Dezimaltrennzeichen in einem Eingabewert die Genauigkeit der Spalte abzüglich ihrer Skala überschreitet, kann der Wert nicht in die Spalte kopiert (oder eingefügt oder aktualisiert) werden. Diese Regel gilt für alle Werte, die nicht innerhalb des Bereichs der Spaltendefinition liegen. Der zulässige Wertebereich für eine `numeric(5,2)`-Spalte erstreckt sich z. B. von `-999.99` bis `999.99`. 

 *scale*   
Die Anzahl aller Dezimalstellen im Nachkommabereich des Wertes bzw. die Anzahl der Stellen auf der rechten Seite des Dezimaltrennzeichens. Ganzzahlen haben keine Dezimalstellen. In einer Spaltenspezifikation muss der Wert für die Dezimalstellen kleiner oder gleich dem Wert für die Genauigkeit sein. Wenn Sie nichts angeben, werden standardmäßig 0 Dezimalstellen verwendet. Es sind maximal 37 Dezimalstellen zulässig.  
Wenn ein Eingabewert, der in eine Tabelle geladen wird, mehr Dezimalstellen aufweist, als für die Spalte zulässig sind, wird der Wert auf die angegebene Dezimalstelle gerundet. Die Spalte PRICEPAID in der Tabelle SALES ist z. B. eine DECIMAL(8,2)-Spalte. Wenn ein DECIMAL(8,4)-Wert in die Spalte PRICEPAID eingefügt wird, wird der Wert auf 2 Dezimalstellen gerundet.   

```
insert into sales
values (0, 8, 1, 1, 2000, 14, 5, 4323.8951, 11.00, null);

select pricepaid, salesid from sales where salesid=0;

pricepaid | salesid
-----------+---------
4323.90 |       0
(1 row)
```
 Die Ergebnisse expliziter Umwandlungen von Werten, aus der Tabelle ausgewählt wurden, werden jedoch nicht gerundet.

**Anmerkung**  
Der maximale positive Wert, der in eine DECIMAL(19,0)-Spalte eingefügt werden kann, ist `9223372036854775807` (263 -1). Die maximale negative Wert ist `-9223372036854775807`. Wenn versucht wird, den Wert `9999999999999999999` (19 mal die Ziffer Neun) einzufügen, wird ein Überlauffehler verursacht. Unabhängig von der Position des Dezimaltrennzeichens ist `9223372036854775807` die längste Zeichenkette, die AWS Clean Rooms als DECIMAL-Zahl darstellen kann. Der größte Wert, der in eine DECIMAL(19,18)-Spalte geladen werden kann, ist z. B. `9.223372036854775807`.  
Diese Regeln haben folgenden Grund:   
DEZIMALWERTE mit einer Genauigkeit von 19 oder weniger signifikanten Stellen werden intern als 8-Byte-Ganzzahlen gespeichert.
DEZIMALWERTE mit einer Genauigkeit von 20 bis 38 signifikanten Stellen werden als 16-Byte-Ganzzahlen gespeichert.

## Hinweise zur Verwendung von 128-Bit-DECIMAL- oder -NUMERIC-Spalten
<a name="Numeric_types-notes-about-using-128-bit-decimal-or-numeric-columns"></a>

Weisen Sie DECIMAL-Spalten nur dann maximale Genauigkeit zu, wenn Sie sicher sind, dass Ihre Anwendung diese Präzision erfordert. 128-Bit-Werte belegen doppelt so viel Speicherplatz wie 64-Bit-Werte und können zu langsameren Ausführungszeiten von Abfragen führen. 

# Gleitkommazahl-Typen
<a name="Numeric_types-floating-point-types"></a>

Verwenden Sie die Datentypen REAL oder DOUBLE PRECISION, um numerische Werte mit *variabler Genauigkeit* zu speichern. Diese Typen sind *ungenaue* Typen, d. h. manche Werte werden als Annährungen gespeichert, so dass bei der Speicherung und Rückgabe eines bestimmten Wertes leichte Abweichungen auftreten können. Wenn Sie auf genaue Speicherungen und Berechnungen zurückgreifen müssen (z. B. bei Geldbeträgen), verwenden Sie den Datentyp DECIMAL.

REAL steht für das Gleitkommaformat mit einfacher Genauigkeit gemäß dem IEEE-Standard 754 für Gleitkomma-Arithmetik. Es hat eine Genauigkeit von etwa 6 Ziffern und einen Bereich von etwa 1E-37 bis 1E\$137. Sie können diesen Datentyp auch als angeben. FLOAT4

DOUBLE PRECISION steht für das Gleitkommaformat mit doppelter Genauigkeit gemäß dem IEEE-Standard 754 für binäre Gleitkommaarithmetik. Es hat eine Genauigkeit von etwa 15 Ziffern und einen Bereich von etwa 1E-307 bis 1E\$1308. Sie können diesen Datentyp auch als FLOAT oder angeben FLOAT8.

# Berechnungen mit numerischen Werten
<a name="Numeric_computations"></a>

In bezieht AWS Clean Rooms sich *Berechnung* auf binäre mathematische Operationen: Addition, Subtraktion, Multiplikation und Division. In diesem Abschnitt werden die erwarteten Ausgabetypen dieser Operationen beschrieben sowie die spezielle Formel, die verwendet wird, um die Genauigkeit und die Dezimalstellen zu ermitteln, wenn DECIMAL-Datentypen involviert sind. 

Wenn bei der Verarbeitung von Abfragen numerische Werte berechnet werden, kann es vorkommen, dass eine Berechnung nicht möglich ist und die Abfrage einen numerischen Überlauffehler zurückgibt. Außerdem können Fälle auftreten, in denen die Dezimalstellen berechneter Werte variieren bzw. nicht den Erwartungen entsprechen. Bei manchen Operationen ist es möglich, diese Probleme durch explizite Umwandlungen (Typerweiterung) oder AWS Clean Rooms -Konfigurationsparameter zu umgehen. 

Weitere Informationen zu den Ergebnissen ähnlicher Berechnungen mit SQL-Funktionen finden Sie unter [AWS Clean Rooms Spark SQL-Funktionen](sql-functions-topic-spark.md). 

## Ausgabetypen für Berechnungen
<a name="Numeric_computations-return-types"></a>

Angesichts der Anzahl der in AWS Clean Rooms unterstützten numerischen Datentypen zeigt die folgende Tabelle die erwarteten Rückgabetypen für Additions-, Subtraktions-, Multiplikations- und Divisionsoperationen. Die erste Spalte links in der Tabelle enthält dabei den ersten Operanden und die oberste Zeile den zweiten Operanden der Berechnung. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/clean-rooms/latest/sql-reference/Numeric_computations.html)

## Genauigkeit und Dezimalstellen der berechneten DECIMAL-Ergebnisse
<a name="Numeric_computations-precision-and-scale-of-computed-decimal-results"></a>

In der folgenden Tabelle werden die Regeln für die Berechnung der Genauigkeit und der Dezimalstellen zusammengefasst, wenn mathematische Operationen DECIMAL-Ergebnisse ausgeben. In dieser Tabelle `p1` und `s1` stellen die Genauigkeit und Skalierung des ersten Operanden in einer Berechnung dar. `p2`und `s2` stellen die Genauigkeit und den Maßstab des zweiten Operanden dar. (Unabhängig von diesen Berechnungen ist die maximale Genauigkeit eines Ergebnisses 38 und der maximale Wert für die Dezimalstellen 38.) 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/clean-rooms/latest/sql-reference/Numeric_computations.html)

Die Spalten PRICEPAID und COMMISSION in der Tabelle SALES sind z. B. DECIMAL(8,2)-Spalten. Wenn Sie PRICEPAID durch COMMISSION dividieren (oder umgekehrt), sieht die Formel wie folgt aus: 

```
Precision = 8-2 + 2 + max(4,2+8-2+1)
= 6 + 2 + 9 = 17

Scale = max(4,2+8-2+1) = 9

Result = DECIMAL(17,9)
```

Die folgende Berechnung stellt die allgemeine Regel für die Berechnung der Genauigkeit und der Dezimalstellen in Ergebnissen von Operationen dar, die mit DECIMAL-Werten sowie mit Satzoperatoren wie UNION, INTERSECT und EXCEPT oder Funktionen wie COALESCE und DECODE durchgeführt werden: 

```
Scale = max(s1,s2)
Precision = min(max(p1-s1,p2-s2)+scale,19)
```

Beispielsweise wird eine DEC1 Tabelle mit einer DECIMAL (7,2) -Spalte mit einer DEC2 Tabelle mit einer DECIMAL (15,3) -Spalte verknüpft, um eine Tabelle zu erstellen. DEC3 Das Schema von DEC3 zeigt, dass die Spalte zu einer NUMERIC-Spalte (15,3) wird. 

```
select * from dec1 union select * from dec2;
```

Im Beispiel oben wird die Formel wie folgt angewendet: 

```
Precision = min(max(7-2,15-3) + max(2,3), 19)
= 12 + 3 = 15

Scale = max(2,3) = 3

Result = DECIMAL(15,3)
```

## Hinweise für Divisionsoperationen
<a name="Numeric_computations-notes-on-division-operations"></a>

Bei Divisionsoperationen geben divide-by-zero Bedingungen Fehler zurück. 

Für Dezimalstellen gilt ein Grenzwert von 100, nachdem die Genauigkeit und die Dezimalstellen berechnet wurden. Wenn im Ergebnis mehr als 100 Dezimalstellen berechnet wurden, wird das Ergebnis der Division wie folgt skaliert:
+ Genauigkeit = ` precision - (scale - max_scale)` 
+ Skalieren = ` max_scale ` 

Wenn die berechnete Genauigkeit über dem maximalen Wert für die Genauigkeit (38) liegt, wird die Genauigkeit auf 38 reduziert, und für die Dezimalstellen wird die folgende Formel angewendet: `max(38 + scale - precision), min(4, 100))` 

## Überlaufbedingungen
<a name="Numeric_computations-overflow-conditions"></a>

Der Überlauf wird bei allen numerischen Berechnungen geprüft. DECIMAL-Daten mit einer Genauigkeit von 19 oder weniger werden als 64-Bit-Ganzzahlen gespeichert. DECIMAL-Daten mit einer Genauigkeit größer als 19 werden als 128-Bit-Ganzzahlen gespeichert. Die maximale Genauigkeit für alle DECIMAL-Werte beträgt 38, und es sind maximal 37 Dezimalstellen zulässig. Überlauffehler treten auf, wenn ein Wert diese Grenzwerte überschreitet; diese gelten sowohl für Zwischenergebnissätze als auch für Endergebnissätze: 
+ Explizites Casting führt zu Laufzeitüberlauffehlern, wenn bestimmte Datenwerte nicht der in der Cast-Funktion angegebenen Genauigkeit oder Skala entsprechen. Sie können beispielsweise nicht alle Werte aus der Spalte PRICEPAID in der SALES-Tabelle (eine Spalte DECIMAL (8,2)) umwandeln und ein DECIMAL-Ergebnis (7,3) zurückgeben: 

  ```
  select pricepaid::decimal(7,3) from sales;
  ERROR:  Numeric data overflow (result precision)
  ```

  Dieser Fehler tritt auf, weil *einige* der größeren Werte in der PRICEPAID-Spalte nicht umgewandelt werden können.
+ Multiplikationsoperationen produzieren Ergebnisse, bei denen sich die Anzahl der Dezimalstellen aus der Summe der Dezimalstellen der einzelnen Operanden ergeben. Wenn beide Operanden z. B. 4 Dezimalstellen haben, hat das Ergebnis 8 Dezimalstellen, d. h. es bleiben nur 10 Stellen auf der linken Seite des Dezimaltrennzeichens übrig. Es kann daher relativ schnell passieren, dass Überlaufbedingungen bei der Multiplikation zweier großer Zahlen auftreten, die jeweils eine nicht unerheblich Anzahl von Dezimalstellen aufweisen.

## Numerische Berechnungen mit den Typen INTEGER und DECIMAL
<a name="Numeric_computations-numeric-calculations-with-integer-and-decimal-types"></a>

Wenn einer der Operanden in einer Berechnung den INTEGER-Datentyp hat und der andere Operand DECIMAL ist, wird der INTEGER-Operand implizit in DECIMAL umgewandelt. 
+ SMALLINT oder SHORT werden in DECIMAL (5,0) umgewandelt 
+ INTEGER wird in DECIMAL (10,0) umgewandelt 
+ BIGINT oder LONG wird als DECIMAL (19,0) umgewandelt 

Wenn Sie z. B. SALES.COMMISSION, eine DECIMAL(8,2)-Spalte, mit SALES.QTYSOLD, einer SMALLINT-Spalte multiplizieren, wird diese Berechnung umgewandelt in: 

```
DECIMAL(8,2) * DECIMAL(5,0)
```