Speciale waarden voor drijvende komma
Van toepassing op: Databricks SQL 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