MOD スカラー関数
MOD 関数は、最初の引数を 2 番目の引数で除算し、剰余を戻します。
スキーマは SYSIBM です。
剰余を計算するために使用される公式は次のとおりです。
MOD(x,y) = x - FLOOR(x/y) * yここで、 x/y は、除算の切り捨てられた整数の結果です。 最初の引数が負の場合のみ、結果は負になります。それぞれの引数は、いずれかの組み込み数値データ・タイプの値を戻す式であることが必要です。
引数を、文字ストリングまたはグラフィック・ストリングのデータ・タイプにすることもできます。 ストリング入力は、暗黙的に DECFLOAT(34) の数値にキャストされます。
結果は NULL 値になることがあります。いずれかの引数が NULL 値である場合、結果は NULL 値になります。
結果の属性は、以下のように引数に基づきます。
- 両方の引数が短精度整数または長精度整数である場合、結果のデータ・タイプは長精度整数になります。
- 両方の引数が整数であり、少なくとも 1 つの引数が 64 ビット整数である場合、結果のデータ・タイプは 64 ビット整数になります。
- 1 つの引数が整数で、他の引数が 10 進数である場合、 結果のデータ・タイプは 10 進数の引数と同じ精度と位取りになります。
- 両方の引数が 10 進数である場合、結果のデータ・タイプは 10 進数になります。 結果の精度は
min(p-s,p'-s') + max(s,s')で、結果の位取りはmax(s,s')になります。ここで、記号 p と s は最初の引数の精度と位取りを示し、記号 p' と s' は 2 番目の引数の精度と位取りを示します。 - 一方の引数が浮動小数点数で、もう一方が DECFLOAT でない場合、あるいは両方の引数が浮動小数点数である場合、結果のデータ・タイプは倍精度浮動小数点になります。
演算は浮動小数点数で実行されます。 オペランドは、必要であれば、まずはじめに倍精度浮動小数点数に変換されます。 例えば、浮動小数点数と整数または 10 進数のいずれかが関係する演算は、整数または 10 進数を一時的に倍精度浮動小数点数に変換したそのコピーを使って行われます。 浮動小数点数演算の結果は、浮動小数点数の範囲内でなければなりません。
- いずれかの引数が DECFLOAT の場合、結果のデータ・タイプは DECFLOAT(34) となります。
いずれかの引数が特殊 10 進浮動小数点値の場合は、算術演算の一般規則が適用されます。 詳細は、「DECFLOATの算術演算の一般的なルール 」を参照してください。
1 つの引数が DECFLOAT で、2 番目の引数がゼロの場合、結果は NaN となり、無効演算条件が戻されます。
例: M1 と M2 は 2 つのホスト変数であるとします。 M1 を M2 で除算した剰余を調べます。
SELECT MOD(:M1,:M2)
FROM SYSIBM.SYSDUMMY1;以下の表は、M1 と M2 のさまざまな値について、この関数の結果を示しています。
| M1 のデータ・タイプ | M1 値 | M2 のデータ・タイプ | M2 値 | 結果
MOD(:M1,:M2) |
|---|---|---|---|---|
| INTEGER | 5 | INTEGER | 2 | 1 |
| INTEGER | 5 | DECIMAL(3,1) | 2.2 | 0.6 |
| INTEGER | 5 | DECIMAL(3,2) | 2.20 | 0.60 |
| DECIMAL(4,2) | 5.50 | DECIMAL(4,1) | 2.0 | 1.50 |
| DECFLOAT | 1 | DECFLOAT | -無限 | 1 |
| DECFLOAT | -0 | DECFLOAT | INFINITY | -0 |
| DECFLOAT | -0 | DECFLOAT | -無限 | -0 |
