Valori a virgola mobile speciali

Si applica a: segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime

Diversi valori a virgola mobile speciali 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 i valori infinito positivi vengono raggruppati. Analogamente, tutti i valori infinito negativi vengono raggruppati insieme.
  • L'infinito positivo e l'infinito negativo vengono considerati come valori normali nelle chiavi di join.
  • L'ordinamento infinito positivo è inferiore a NaN e superiore a qualsiasi altro valore.
  • L'ordinamento infinito negativo è inferiore a qualsiasi altro valore.

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 valori NaN vengono raggruppati.
  • NaN viene considerato come un valore normale nelle chiavi di join.
  • I valori NaN vanno per ultimi quando in ordine crescente, 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