数值比较

数字的比较是代数式的,即考虑符号。 例如,-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