Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:
Databricks SQL
Databricks Runtime 19 und höher
Stellt Gleitkommazahlen mit Basis 10 mit 16 oder 34 signifikanten Ziffern und ohne feste Skala dar.
Wichtig
DECFLOAT ist in Der Betaversion enthalten. Ein Workspace-Administrator muss den Datentyp DECFLOAT in Vorschauen aktivieren.
Syntax
DECFLOAT [ ( p ) ]
-
p: Die maximale Anzahl signifikanter Dezimalziffern. Unterstützte Werte sind 16 und 34. Standardmäßig sind 34.
DECFLOAT akzeptiert kein Skalenargument. Jeder Wert hat seinen eigenen Exponenten.
Limits
| Eigentum | DECFLOAT(16) |
DECFLOAT(34) |
|---|---|---|
| Signifikante Ziffern | Bis zu 16 | Bis zu 34 |
| Kleinster positiver von null verschiedenen Wert | 1E-398 |
1E-6176 |
| Größter positiver endlicher Wert | (10^16 - 1) × 10^369 |
(10^34 - 1) × 10^6111 |
Die gleichen Grenzen gelten für negative Zahlen. Beide Typen unterstützen außerdem Infinity und NaN.
Literals
Verwendung CAST mit einer Zeichenkette oder einem unterstützten Zahlenwert. Strings können auch , Inf, oder InfinityenthaltenNaN.
Notes
DECFLOAT stellt Dezimalwerte wie 0.1 exakt dar. Werte, die die Genauigkeit überschreiten, können fehlerfrei abgerundet werden, einschließlich mit TRY_CAST. Direkt dezimalen Text wirken. Umwandlung durch FLOAT oder DOUBLE kann an Präzision verlieren.
Die Zeichenkettenausgabe bewahrt nachlaufende Nullstellen, sodass gleiche Werte wie 1.5 und 1.50 verschiedene Zeichenketten erzeugen können (+15E-1 und +150E-2). Wirft von DECFLOAT, um DECIMAL die Hälfte nach oben aufzurunden, unabhängig von DECFLOAT_ROUNDING_MODE.
- Die Arithmetik bewahrt die Präzision, wenn beide Operanden denselben DECFLOAT-Typ besitzen. Gemischte Genauigkeiten oder Operationen mit anderen unterstützten numerischen Typen verwenden
DECFLOAT(34). -
SUMundAVGzurück .DECFLOAT(34)MINundMAXdie Eingabepräzision erhalten. -
SQRT,ABS, undROUNDakzeptiere DECFLOAT direkt.
DECFLOAT_ROUNDING_MODE Kontrolle für Rundungen für Würfe auf DECFLOAT, +, -, *, /, SQRT, SUM, und AVG. Der Standardwert lautet ROUND_HALF_EVEN. Weitere unterstützte Modi sind ROUND_HALF_UP, ROUND_CEILING, ROUND_FLOOR, und ROUND_DOWN.
DIV entfernt den Bruchteil des Ergebnisses, unabhängig davon DECFLOAT_ROUNDING_MODE.
ROUND, BROUND, und TRUNCATE ihre eigenen Rundungsregeln verwenden.
> SET DECFLOAT_ROUNDING_MODE = ROUND_FLOOR;
> SELECT CURRENT_DECFLOAT_ROUNDING_MODE();
ROUND_FLOOR
Im Standardrundungsmodus erzeugt Überlauf unendlich und Division durch Null unendlich oder NaN.
ANSI-Modus ändert diese Ergebnisse nicht. Unterstützte TRY_* arithmetische Funktionen bewahren Unendlich und NaN statt zurückzugeben NULL. NaNs vergleichen gleich und sortieren nach positiver Unendlichkeit. Positiv und minus null sind gleich. Benutze sie, ISNAN um NaN zu erkennen.
Examples
> SELECT CAST('1.5' AS DECFLOAT(34)) + CAST('2.5' AS DECFLOAT(34)) AS total;
+40E-1
> SELECT CAST(CAST('1.23E+100' AS DECFLOAT(34)) AS STRING);
+123E+98
> SELECT typeof(CAST('1' AS DECFLOAT(16)) + 1);
decfloat(34)
Einschränkungen
- Rest- und bitweise Operationen werden nicht unterstützt.
- Funktionen, die Eingaben benötigen
DOUBLE, akzeptieren DECFLOAT nicht direkt. Konvertiere den Wert aufDOUBLEden ersten (das kann zu einem Präzisionsverlust führen). - DECFLOAT ist nicht kompatibel mit Löschvektoren. Wenn Sie eine Delta-Tabelle mit DECFLOAT-Spalten erstellen, setzen
TBLPROPERTIES ('delta.enableDeletionVectors' = 'false')Sie . Für bestehende Tabellen solltest du die Deletion-Vector-Table-Funktion entfernen , bevor du DECFLOAT-Spalten hinzufügst. - Delta-Tabellen, die DECFLOAT enthalten, können keine Iceberg-Reads aktiviert haben.
- Das Schreiben von DECFLOAT-Werten direkt in Parquet-Dateien wird nicht unterstützt.
- DECFLOAT-Spalten enthalten keine Min/Max-Statistiken für Datenüberspringen. Sie können keine Partitionsspalten, Clustering-Schlüssel, Z-Ordnungs-Spalten oder Bloom-Filter-Indexspalten sein.
- Das Verschieben einer Spalte zwischen
DECFLOAT(16)undDECFLOAT(34)mitALTER COLUMNwird nicht unterstützt.