特殊な浮動小数点値
適用対象: 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