特殊浮点值
适用于: Databricks SQL Databricks Runtime
几个特殊的浮点值以不区分大小写的方式处理:
- Inf、+Inf、Infinity、+Infinity:正无穷大
- -Inf、-Infinity:负无穷大
- NaN:非数值
正负无穷大语义
正负无穷大具有以下语义:
- 正无穷大乘以任何正值都会返回正无穷大。
- 负无穷大乘以任何正值都会返回负无穷大。
- 正无穷大乘以任何负值都会返回负无穷大。
- 负无穷大乘以任何负值都会返回正无穷大。
- 正无穷大或负无穷大乘以 0 会返回 NaN。
- 正无穷大或负无穷大等于自身。
- 在聚合中,所有正无穷大值都分组在一起。 同样,所有负无穷大值都分组在一起。
- 正无穷大和负无穷大被视为联接键中的正常值。
- 正无穷大小于 NaN,并且大于任何其他值。
- 负无穷大小于任何其他值。
NaN 语义
在处理与标准浮点语义不完全匹配的 float
或 double
类型时,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