Speciale values a virgola mobile
Si applica a: Databricks SQL Databricks Runtime
Diversi values a virgola mobile speciale vengono trattati in modo senza distinzione tra maiuscole e minuscole:
- Inf, +Inf, Infinity, +Infinity: infinito positivo
- -Inf, -Infinity: infinito negativo
- NaN: non un numero
Semantica dell'infinito positivo e negativo
L'infinito positivo e negativo ha la semantica seguente:
- Infinito positivo moltiplicato per qualsiasi valore positivo restituisce infinito positivo.
- Infinito negativo moltiplicato per qualsiasi valore positivo restituisce infinito negativo.
- Infinito positivo moltiplicato per qualsiasi valore negativo restituisce infinito negativo.
- Infinito negativo moltiplicato per qualsiasi valore negativo restituisce infinito positivo.
- L'infinito positivo o negativo moltiplicato per 0 restituisce NaN.
- L'infinito positivo o negativo è uguale a se stesso.
- Nelle aggregazioni, tutti gli infiniti positivi values vengono raggruppati insieme. Analogamente, tutte le infinite negative values vengono raggruppate insieme.
- L'infinito positivo e l'infinito negativo vengono considerati come values normali nelle chiavi di join.
- L'infinito positivo è inferiore a NaN e superiore a qualsiasi altro values.
- L'infinito negativo è ordinato più basso rispetto a qualsiasi altro values.
Semantica NaN
Quando si tratta di float
tipi o double
che non corrispondono esattamente alla semantica a virgola mobile standard, NaN ha la semantica seguente:
- NaN = NaN restituisce true.
- Nelle aggregazioni, tutti i values NaN vengono raggruppati.
- NaN viene considerato come un valore normale nelle chiavi join.
- NaN values viene per ultimo quando è in ordine crescente, essendo maggiore di qualsiasi altro valore numerico.
Esempi
> 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