MOD
MOD 関数は、最初の引数を 2 番目の引数で割って、その剰余を戻します。
剰余の算出には、次の式が使用されます。
MOD(x,y) = x - (x/y) * y
x/y は、除算の結果を切り捨てた整数です。 結果が負の値になるのは、最初の引数が負の場合だけです。
- expression-1
- 任意の組み込み数値、文字ストリング、 またはグラフィック・ストリングのデータ・タイプの値を戻す式。 ストリング引数は、関数を評価する前に倍精度の浮動小数点にキャストされます。 ストリングを倍精度の浮動小数点に変換する方法については、DOUBLE_PRECISION または DOUBLEを参照してください。
- expression-2
- 任意の組み込み数値、文字ストリング、 またはグラフィック・ストリングのデータ・タイプの値を戻す式。 ストリング引数は、関数を評価する前に倍精度の浮動小数点にキャストされます。 ストリングを倍精度の浮動小数点に変換する方法については、DOUBLE_PRECISION または DOUBLEを参照してください。 いずれかの引数が 10 進浮動小数点である場合を除いて、expression-2 はゼロであってはなりません。
引数が NULL になる可能性がある場合は、結果も NULL になる可能性があります。引数が NULL の場合は、結果は NULL 値になります。
結果の属性は、以下のように決められます。
- 両方の引数が位取りがゼロの長整数または短整数の場合、結果のデータ・タイプは長整数になります。
- 両方の引数が位取りがゼロの整数であり、少なくとも一方の引数が 64 ビット整数の場合、結果のデータ・タイプは 64 ビット整数になります。
- 一方の引数が位取りがゼロの整数で、他方が 10 進数である場合、結果は、10 進数の引数と同じ精度と位取りの 10 進数になります。
- 両方の引数が 10 進数または位取りを伴う整数の場合、結果は 10 進数になります。 結果の精度は MIN(p-s,p'-s') + MAX(s,s') で、結果の位取りは MAX(s,s') になります。ここで、記号 p と s は第 1 オペランドの精度と位取りを表し、p' と s' は第 2 オペランドの精度と位取りを表します。
- いずれかの引数が浮動小数点数で、もう一方のオペランドが 10 進浮動小数点数ではない場合、結果のデータ・タイプは倍精度浮動小数点数になります。
演算は浮動小数点数で実行されます。オペランドは、必要であれば、まずはじめに倍精度浮動小数点数に変換されます。例えば、浮動小数点数と整数または 10 進数のいずれかが関係する演算は、整数または 10 進数を一時的に倍精度浮動小数点数に変換したそのコピーを使って行われます。浮動小数点数演算の結果は、浮動小数点数の値の範囲内になければなりません。
- いずれかの引数が 10 進浮動小数点の場合、結果のデータ・タイプは DECFLOAT(34) となります。引数が特殊 10 進浮動小数点値の場合は、算術演算の一般的な規則が適用されます。 詳しくは、DECFLOAT の一般的な算術演算規則を参照してください。
いずれかの引数が 10 進浮動小数点であり、2 番目の オペランドの評価が 0 になる場合、結果は NaN であり、 無効演算を示す警告 (SQLSTATE 0168D) が発行されます。1 MOD(1, -Infinity) は値 1 を戻します。
例
- ホスト変数 M1 は値が 5 の整数のホスト変数であり、ホスト変数 M2 は値が 2 の整数のホスト変数であると想定します。
値として 1 が戻されます。SELECT MOD(:M1,:M2) FROM SYSIBM.SYSDUMMY1
- ホスト変数 M1 は値が 5 の整数のホスト変数であり、ホスト変数 M2 は
値が 2.20 の DECIMAL(3,2) ホスト変数であると想定します。
値として 0.60 が戻されます。SELECT MOD(:M1,:M2) FROM SYSIBM.SYSDUMMY1
- ホスト変数 M1 は値が 5.50 の DECIMAL(4.2) のホスト変数であり、ホスト変数 M2 は値が 2.0 の DECIMAL(4.1) のホスト変数であると想定しま
す。
値として 1.50 が戻されます。SELECT MOD(:M1,:M2) FROM SYSIBM.SYSDUMMY1
1 SQL_DECFLOAT_WARNINGS 照会オプションに *YES が
指定されている場合、NaN が戻され、警告が出されます。それ以外の場合、ゼロ除算警告
またはエラーが戻されます。