Spezielle Gleitkommawerte
Gilt für: Databricks SQL Databricks Runtime
Mehrere spezielle Gleitkommawerte werden unabhängig von Groß/Kleinschreibung behandelt:
- Inf, +Inf, Infinity, +Infinity: positive Unendlichkeit
- -Inf, -Infinity: negative Unendlichkeit
- NaN: Not a Number (keine Zahl)
Semantik für positive und negative Unendlichkeit
Positive und negative Unendlichkeit weisen die folgende Semantik auf:
- Positive Unendlichkeit multipliziert mit einem beliebigen positiven Wert gibt positive Unendlichkeit zurück.
- Negative Unendlichkeit multipliziert mit einem beliebigen positiven Wert gibt negative Unendlichkeit zurück.
- Positive Unendlichkeit multipliziert mit einem beliebigen negativen Wert gibt negative Unendlichkeit zurück.
- Negative Unendlichkeit multipliziert mit einem beliebigen negativen Wert gibt positive Unendlichkeit zurück.
- Positive oder negative Unendlichkeit multipliziert mit 0 gibt NaN zurück.
- Positive oder negative Unendlichkeit ist gleich sich selbst.
- In Aggregationen werden alle positiven Unendlichkeitswerte gruppiert. In ähnlicher Weise werden alle negativen Unendlichkeitswerte gruppiert.
- Positive und negative Unendlichkeit werden in Joinschlüsseln als normale behandelt.
- Positive Unendlichkeit wird niedriger als NaN und höher als alle anderen Werte eingeordnet.
- Negative Unendlichkeit wird niedriger als alle anderen Werte eingeordnet.
NaN-Semantik
Beim Umgang mit den Typen float
oder double
, die nicht genau der standardmäßigen Gleitkommasemantik entsprechen, hat NaN die folgende Semantik:
- NaN = NaN gibt TRUE zurück.
- In Aggregationen werden alle NaN-Werte gruppiert.
- NaN wird in Joinschlüsseln als normaler Wert behandelt.
- NaN-Werte stehen in aufsteigender Reihenfolge an letzter Stelle und sind größer als jeder andere numerische Wert.
Beispiele
> SELECT double('infinity');
Infinity
> SELECT float('-inf');
-Infinity
> SELECT float('NaN');
NaN
> SELECT double('infinity') * 0;
NaN
> SELECT double('-infinity') * (-1234567);
Infinity
> SELECT double('infinity') < double('NaN');
true
> SELECT double('NaN') = double('NaN');
true
> SELECT double('inf') = double('infinity');
true
> SELECT COUNT(*), c2
FROM VALUES (1, double('infinity')),
(2, double('infinity')),
(3, double('inf')),
(4, double('-inf')),
(5, double('NaN')),
(6, double('NaN')),
(7, double('-infinity'))
AS test(c1, c2)
GROUP BY c2;
2 NaN
2 -Infinity
3 Infinity