数値比較

数値は代数比較されます。すなわち、符号が考慮されます。 例えば、-2 は +1 より小さい値として扱われます。 異なるデータ・タイプの数値を比較する場合は、比較の実行方法に関して特定の規則が適用されます。

一方が整数で、もう一方が 10 進数の場合、 10 進数に変換された整数の一時コピーが比較に使用されます。

位取りの異なる 10 進数を比較する場合、 比較は、一方の数値の小数部分が、他方の数値の小数部分と同じ桁数になるように、 後続ゼロを使って拡張されたその数値の一時コピーを使用して行われます。

一方の数値が倍精度浮動小数点で、もう一方が整数、10 進数、 または単精度浮動小数点の場合は、もう一方の数値を一時的に 倍精度浮動小数点数に変換してから、比較を行います。 ただし、単精度浮動小数点数を浮動小数点定数と比較する場合 には、定数の単精度形式を使って比較が行われます。

2 つの浮動小数点値が等しいのは、正規形のビット構成が同一の場合のみです。

一方の数値が DECFLOAT で、もう一方の数値が整数、10 進数、単精度浮動小数点、または倍精度浮動小数点の場合、もう一方の数値を一時的に DECFLOAT に変換してから、比較を行います。

一方の数値が DECFLOAT(16) で、もう一方の数値が DECFLOAT(34) の場合、比較の前に DECFLOAT(16) 値が DECFLOAT(34) に変換されます。

さらに、DECFLOAT データ・タイプは、正のゼロと負のゼロの両方をサポートします。 正のゼロと負のゼロの 2 進表現は異なりますが、等号 (=) 述部は、正のゼロと負のゼロの比較に対して真を戻します。

関数 COMPARE_DECFLOAT および TOTALORDER を使用して、2 進レベルで比較を行うことができます。 例えば、2.0<>2.00 の比較の場合です。

DECFLOAT データ・タイプは、正と負の NaN (静止とシグナル) および正と負の無限大の指定もサポートします。 SQL の観点からは、無限大 = 無限大、NaN = NaN、sNaN = sNaN です。

以下は、これらの特殊値の比較の規則です。

  • 無限大は同じ符号 (正または負) の無限大とのみ等しい
  • NaN は同じ符号 (正または負) の NaN とのみ等しい
  • sNaN は同じ符号 (正または負) の sNaN とのみ等しい

異なる特殊値の間の順序は、以下のとおりです。-NAN < -SNAN < -INFINITY < 0 < INFINITY < SNAN <NAN