Dela via


Särskilda flyttalsvärden

Gäller för:check markerad ja Databricks SQL-kontroll markerad ja 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 multiplicerat med ett positivt värde returnerar positiv oändlighet.
  • Negativ oändlighet multiplicerat med ett positivt värde returnerar negativ oändlighet.
  • Positiv oändlighet multiplicerat 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 multiplicerat 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