数值比较
数字的比较是代数式的,即考虑符号。 例如,-2 小于 +1。 当比较不同数据类型的数量时,执行比较的方式受某些规则的影响。
如果一个数是整数,而另一个数是十进制数,那么将使用该整数的临时副本(已转换为十进制数)进行比较。
比较具有不同小数位数的十进制数时,将使用其中一个数的临时副本(已用尾部零扩充,使其小数部分与另一个数具有相同的位数)进行比较。
如果一个数字是双精度浮点数,而另一个是整数、十进制数或单精度浮点数,则将另一个数字转换为双精度浮点数,并使用转换后的临时副本进行比较。 然而,如果将单个精度浮点数与浮点常数进行比较,则比较结果为常数的单个精度形式。
仅当其归一化形式的位配置相同时,两个浮点数才相等。
如果一个数字是 DECFLOAT,而另一个数字是整数、十进制数、单精度浮点数或双精度浮点数,则将另一个数字转换为 DECFLOAT 的临时副本进行比较。
如果一个数字是 DECFLOAT(16),另一个数字是 DECFLOAT(34),则在比较前将 DECFLOAT(16) 值转换为 DECFLOAT(34)。
此外,DECFLOAT数据类型支持正零和负零。 正零和负零在二进制中的表示不同,但相等(=)谓词在比较正零和负零时返回真值。
函数 COMPARE_DECFLOAT 和 TOTALORDER 可用于在二进制级别进行比较。 例如, 2.0 与 2.00 的比较。
DECFLOAT数据类型还支持负和正 NaN (静音和信号)以及负和正无穷大。 从SQL的角度来看,无穷大=无穷大, NaN = NaN, , sNaN = sNaN。
以下规则是这些特殊值的比较规则:
- 无穷大仅与同符号(正或负)的无穷大相等
- NaN 仅与同符号(正负号)的 相等 NaN
- sNaN 仅与同符号(正负号)的 相等 sNaN
不同特殊数值之间的排序如下: -NAN < -SNAN < -INFINITY < 0 < INFINITY <
SNAN <NAN