Delen via


Speciale waarden voor drijvende komma

Van toepassing op: vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime

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

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

Positieve en negatieve oneindigheidssemantiek

Positieve en negatieve oneindigheid hebben de volgende semantiek:

  • Positief oneindigheid vermenigvuldigd met een positieve waarde retourneert positieve oneindigheid.
  • Negatieve oneindigheid vermenigvuldigd met een positieve waarde retourneert negatieve oneindigheid.
  • Positief oneindigheid vermenigvuldigd met een negatieve waarde retourneert negatieve oneindigheid.
  • Negatieve oneindigheid vermenigvuldigd met een negatieve waarde retourneert positieve oneindigheid.
  • Positief of negatief oneindigheid vermenigvuldigd met 0 retourneert NaN.
  • Positief of negatief oneindig 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

Bij het omgaan met of double typen die niet exact overeenkomen met float standaard drijvendekomma-semantiek, heeft NaN de volgende semantiek:

  • NaN = NaN retourneert waar.
  • In aggregaties worden alle NaN-waarden gegroepeerd.
  • NaN wordt behandeld als een normale waarde in joinsleutels.
  • NaN-waarden gaan als laatste in oplopende volgorde, groter dan een andere numerieke waarde.

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