数値比較

数値は代数の場合と同じように比較されます。つまり、符号が考慮されます。例えば、–2 は +1 より小さくなります。

一方の数値が整数で、もう一方の数値が 10 進数の場合、その整数を 10 進数に変換した整数の一時的なコピーを使用して比較が行われます。

10 進数または位取りがゼロ以外の 2 進数を比較するときに、比較する数値の位取りが異なる場合は、一方の数値の一時的なコピー (両者の小数部が同じ桁数になるように、一方の数値の小数部の桁数を後続ゼロによって増やしたもの) を使用して比較が行われます。

一方の数値が浮動小数点数で、もう一方の数値が整数、10 進数、または単精度の浮動小数点数である場合は、2 番目の数値を倍精度の浮動小数点数に変換し、その一時的なコピーを使用して比較が行われます。ただし、単精度浮動小数点の列を定数と比較するときに、その定数が単精度の浮動小数点数で表される場合は、定数の単精度形式を使用して比較が行われます。

2 つの浮動小数点数は、両者の正規形のビット構成が同一である場合にのみ等しくなります。

一方の数値が DECFLOAT で、もう一方の数値が整数、10 進数、単精度の浮動小数点数、または倍精度の浮動小数点数である場合、2 番目の数値を DECFLOAT に変換し、その一時的なコピーを使用して比較が行われます。

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

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

DECFLOAT データ・タイプでは、同じ数値に対して複数のビット表現が可能です。 例えば、2.00 と 2.0 は数値的には同一でもビット表現が異なる 2 つの数値です。 = (等号) 述部では、比較 2.0 = 2.00 に対して真が返されます。2.0 = 2.00 が真であれば、 2.0 < 2.00 は偽です。ここで説明する動作は、DECFLOAT 値のすべての比較で真を保持します (例えば、UNION、SELECT DISTINCT、COUNT DISTINCT、基本述部、IN 述部、MIN、MAX などの場合)。例えば、
   SELECT 2.0 FROM SYSIBM.SYSDUMMY
   UNION
   SELECT 2.00 FROM SYSIBM.SYSDUMMY
上記により、1 行のデータが生成されます。 この照会では、返される値 (2.0 または 2.00) は不定です。

2 進レベルで比較を実行する場合は、関数 COMPARE_DECFLOAT および TOTALORDER を使用することができます。 例えば、2.0<>2.00 の比較の場合などです。こうした関数を使用する場合における 10 進浮動小数点値の比較順序は、-NaN < -sNaN < -Infinity < -0.10 <-0.100 < -0 < 0 < 0.100 < 0.10 < Infinity < sNaN < NaN となります。

DECFLOAT データ・タイプは、正と負の NaN (Quiet および Signaling) の指定、および正と負のInfinityの指定もサポートします。 SQL の観点から見ると、無限大 = 無限大、NaN = NaN、および sNaN = sNaN です。

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

これらの特殊値の場合、以下の規則が比較の規則となります。
  • 無限大の比較は、同じ符号 (正または負) の無限大のみに対して等しくなります。
  • NaN の比較は、同じ符号 (正または負) の NaN のみに対して等しくなります。
  • sNaN の比較は、同じ符号 (正または負) の sNaN のみに対して等しくなります。

ストリング・データ・タイプと数値データ・タイプを比較する場合は、 ストリングが、同じ精度と位取りの数値データ・タイプに変換されるので、 ストリングの内容は数字を表す有効なストリング表現である必要があります。