Freigeben über


Spezielle Gleitkommawerte

Gilt für: durch Häkchen mit „Ja“ markiert Databricks SQL durch Häkchen mit „Ja“ markiert 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