特殊浮点值

适用于:Databricks SQL check marked yes Databricks Runtime

几个特殊的浮点值以不区分大小写的方式处理:

  • Inf、+Inf、Infinity、+Infinity:正无穷大
  • -Inf、-Infinity:负无穷大
  • NaN:非数值

正负无穷大语义

正负无穷大具有以下语义:

  • 正无穷大乘以任何正值都会返回正无穷大。
  • 负无穷大乘以任何正值都会返回负无穷大。
  • 正无穷大乘以任何负值都会返回负无穷大。
  • 负无穷大乘以任何负值都会返回正无穷大。
  • 正无穷大或负无穷大乘以 0 会返回 NaN。
  • 正无穷大或负无穷大等于自身。
  • 在聚合中,所有正无穷大值都分组在一起。 同样,所有负无穷大值都分组在一起。
  • 正无穷大和负无穷大被视为联接键中的正常值。
  • 正无穷大小于 NaN,并且大于任何其他值。
  • 负无穷大小于任何其他值。

NaN 语义

在处理与标准浮点语义不完全匹配的 floatdouble 类型时,NaN 具有以下语义:

  • NaN = NaN 返回 true。
  • 在聚合中,所有 NaN 值都分组在一起。
  • NaN 被视为联接键中的正常值。
  • NaN 值按升序排列后为最后一个值,大于任何其他数值。

示例

> 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