Särskilda flyttalsvärden
Gäller för: Databricks SQL Databricks Runtime
Flera särskilda flyttalsvärden behandlas på ett skiftlägesokänsligt sätt:
- Inf, +Inf, Infinity, +Infinity: positiv oändlighet
- -Inf, -Infinity: negativ oändlighet
- NaN: inte ett tal
Positiv och negativ oändlighetssemantik
Positiv och negativ oändlighet har följande semantik:
- Positiv oändlighet multiplicerad med ett positivt värde returnerar positiv oändlighet.
- Negativ oändlighet multiplicerad med ett positivt värde returnerar negativ oändlighet.
- Positiv oändlighet multiplicerad med ett negativt värde returnerar negativ oändlighet.
- Negativ oändlighet multiplicerat med ett negativt värde returnerar positiv oändlighet.
- Positiv eller negativ oändlighet multiplicerad med 0 returnerar NaN.
- Positiv eller negativ oändlighet är lika med sig själv.
- I sammansättningar grupperas alla positiva oändlighetsvärden tillsammans. På samma sätt grupperas alla negativa oändlighetsvärden tillsammans.
- Positiv oändlighet och negativ oändlighet behandlas som normalvärden i kopplingsnycklar.
- Positiv oändlighet sorterar lägre än NaN och högre än andra värden.
- Negativ oändlighet sorterar lägre än andra värden.
NaN-semantik
När du hanterar float
eller double
typer som inte exakt matchar standard-flyttalssemantik har NaN följande semantik:
- NaN = NaN returnerar true.
- I sammansättningar grupperas alla NaN-värden tillsammans.
- NaN behandlas som ett normalvärde i kopplingsnycklar.
- NaN-värden går sist i stigande ordning, större än något annat numeriskt värde.
Exempel
> 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