Speciale drijvendekommagewaarden

Van toepassing op:controleren met ja Databricks SQL-controle gemarkeerd als ja Databricks Runtime

Verschillende speciale drijvendekommawaarden worden op een niet-hoofdlettergevoelige manier behandeld:

  • Inf, +Inf, Infinity, +Infinity: positief oneindig
  • -Inf, -Infinity: negatieve oneindigheid
  • NaN: geen getal

Positieve en negatieve oneindigheidssemantiek

Positieve en negatieve oneindigheid hebben de volgende semantiek:

  • Positieve oneindigheid vermenigvuldigd met een positieve waarde retourneert positieve oneindigheid.
  • Negatieve oneindigheid vermenigvuldigd met een positieve waarde retourneert negatieve oneindigheid.
  • Positieve oneindigheid vermenigvuldigd met een negatieve waarde retourneert negatieve oneindigheid.
  • Negatieve oneindigheid vermenigvuldigd met een negatieve waarde retourneert positieve oneindigheid.
  • Positief of negatief oneindig vermenigvuldigd met 0 retourneert NaN.
  • Positieve of negatieve oneindigheid is gelijk aan zichzelf.
  • In aggregaties worden alle positieve oneindigheidswaarden gegroepeerd. Op dezelfde manier worden alle negatieve oneindigheidswaarden gegroepeerd.
  • Positieve oneindigheid en negatieve oneindigheid worden behandeld als normale waarden in joinsleutels.
  • Positieve oneindigheid sorteert lager dan NaN en hoger dan andere waarden.
  • Negatieve oneindigheid sorteert lager dan andere waarden.

NaN-semantiek

Wanneer u te maken hebt met of-typen double die niet exact overeenkomen met float standaard drijvendekomma-semantiek, heeft NaN de volgende semantiek:

  • NaN = NaN retourneert true.
  • In aggregaties worden alle NaN-waarden gegroepeerd.
  • NaN wordt behandeld als een normale waarde in joinsleutels.
  • NaN-waarden worden het laatst weergegeven in oplopende volgorde, groter dan andere numerieke waarden.

Voorbeelden

> 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