Speciální values s pohyblivou řádovou čárkou
Platí pro: Databricks SQL Databricks Runtime
Několik speciálních values s plovoucí řádovou čárkou se zpracovává a nerozlišují podle velikosti písmen:
- Inf, +Inf, nekonečno, +nekonečno: kladné nekonečno
- -Inf, -Infinity: záporné nekonečno
- NaN: nejedná se o číslo.
Pozitivní a negativní sémantika nekonečna
Kladné a záporné nekonečno má následující sémantiku:
- Kladné nekonečno vynásobené libovolnou kladnou hodnotou vrátí kladné nekonečno.
- Záporné nekonečno vynásobené libovolnou kladnou hodnotou vrátí záporné nekonečno.
- Kladné nekonečno vynásobené libovolnou zápornou hodnotou vrátí záporné nekonečno.
- Záporné nekonečno vynásobené libovolnou zápornou hodnotou vrátí kladné nekonečno.
- Kladné nebo záporné nekonečno vynásobené 0 vrátí NaN.
- Kladné nebo záporné nekonečno se rovná sobě.
- V agregacích jsou všechna kladná nekonečna values seskupena dohromady. Všechna záporná nekonečna values jsou seskupena dohromady.
- Kladné nekonečno a záporné nekonečno se považují za normální values v klíčích join.
- Kladné nekonečno se řadí nižší než NaN a vyšší než jakákoli jiná values.
- Záporné nekonečno se řadí níže než jakákoli jiná values.
Sémantika NaN
Při práci s float
typy double
, které přesně neodpovídají standardní sémantice s plovoucí desetinnou čárkou, má NaN následující sémantiku:
- NaN = NaN vrátí hodnotu true.
- V agregacích jsou všechny NaN values seskupené.
- Hodnota NaN se v klíčích join považuje za normální hodnotu.
- NaN values je vnímán jako největší hodnota a ve vzestupném pořadí se umisťuje nakonec, jelikož je větší než jakákoli jiná číselná hodnota.
Příklady
> 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