Oracle SQL 関数 : MOD : 剰余演算
numberRet := MOD( number1 , number2 ); MODは number1 を number2 で割った余りを戻します。 number2 が0の場合は number1 を返します。 numberRet の値は、数値の優先順位が最も高い引数を判断し、 残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。以下に簡単な例を示します。(「11」を「4」で割った時の余りの計算です。)
SQL> SELECT MOD(11, 4) FROM DUAL; MOD(11,4) ---------- 3以下に、被除数が負値の場合や、除数が負値の場合、及び実数での「MOD」の結果を示します。
SQL> SELECT 2 MOD( 11, 0) AS "ZERO除算" 3 ,MOD(-11, 4) AS "被除数が負" 4 ,MOD( 11, -4) AS "除数が負" 5 ,MOD(-11, -4) AS "共に負" 6 ,MOD( 11.1, 4) AS "被除数が実数" 7 ,MOD( 11, 4.1) AS "除数が実数" 8 FROM DUAL; ZERO除算 被除数が負 除数が負 共に負 被除数が実数 除数が実数 ---------- ---------- ---------- ---------- ------------ ---------- 11 -3 3 -3 3.1 2.8
MOD 関数の戻り値の符号は、被除数の符号と同じになります。これは通常の除算の余りの計算と一緒だと思います。
尚、MOD 関数の計算は以下の計算式と結果が同じになります。
numberRet := number1 - number2 * TRUNC(number1 / number2)先ほどの MOD 関数を置き換えてみます。
SQL> SELECT 2 (-11) - ( 4) * TRUNC((-11) / ( 4)) AS "被除数が負" 3 ,( 11) - (-4) * TRUNC(( 11) / (-4)) AS "除数が負" 4 ,(-11) - (-4) * TRUNC((-11) / (-4)) AS "共に負" 5 ,( 11.1) - ( 4) * TRUNC(( 11.1) / (4)) AS "被除数が実数" 6 ,( 11) - (4.1) * TRUNC((11) / (4.1)) AS "除数が実数" 7 FROM DUAL; 被除数が負 除数が負 共に負 被除数が実数 除数が実数 ---------- ---------- ---------- ------------ ---------- -3 3 -3 3.1 2.8