Oracleでは、REMAINDER()
関数は、最初の引数の余りを2番目の引数で割った値を返します。
MOD()
に似ています ROUND()
を使用することを除いて関数 その計算では、MOD()
FLOOR()
を使用します その計算で。
構文
構文は次のようになります:
REMAINDER(n2, n1)
各引数は、任意の数値データ型、または暗黙的に数値データ型に変換できる任意の非数値データ型にすることができます。
例
次に例を示します:
SELECT REMAINDER(100, 6)
FROM DUAL;
結果:
REMAINDER(100,6) ___________________ -2
REMAINDER()
vs MOD()
上記の結果は、特にMOD()
と比較した場合、予期しないように見える場合があります。 働き。ただし、これはMOD()
が原因です。 FLOOR()
を使用します REMAINDER()
の間、数式で関数 ROUND()
を使用します 働き。
比較した2つの関数は次のとおりです。
SELECT
REMAINDER(100, 6),
MOD(100, 6)
FROM DUAL;
結果:
REMAINDER(100,6) MOD(100,6) ___________________ _____________ -2 4
この場合、最初の引数の残りを2番目の引数で割った値を返しますが、2つの関数からは大きく異なる結果が得られます。
何が起こっているのですか?
おそらくそれについて考える最も簡単な方法は次のようなものです:
SELECT
100/6,
ROUND(100/6) AS "ROUND()",
FLOOR(100/6) AS "FLOOR()"
FROM DUAL;
結果:
100/6 ROUND() FLOOR() ---------- ---------- ---------- 16.6666667 17 16
この場合、ROUND()
を使用するかどうかによって、異なる結果が得られます。 またはFLOOR()
。
- 17に6を掛けると、102になります。これにより、-2の余りが得られます。
- 16に6を掛けると、96になります。これにより、余りは4になります。
6
を変更した場合 7
に 、両方の関数が同じ結果を返します:
SELECT
REMAINDER(100, 7),
MOD(100, 7)
FROM DUAL;
結果:
REMAINDER(100,7) MOD(100,7) ___________________ _____________ 2 2
ROUND()
は次のとおりです およびFLOOR()
戻る:
SELECT
100/7,
ROUND(100/7) AS "ROUND()",
FLOOR(100/7) AS "FLOOR()"
FROM DUAL;
結果:
100/7 ROUND() FLOOR() ---------- ---------- ---------- 14.2857143 14 14
非数値引数
引数は、任意の数値データ型、または暗黙的に数値データ型に変換できる任意の非数値データ型にすることができます。
引数がその基準を満たさない場合に何が起こるかの例を次に示します。
SELECT REMAINDER('Ponzi', 'Invest')
FROM DUAL;
結果:
Error starting at line : 1 in command - SELECT REMAINDER('Ponzi', 'Invest') FROM DUAL Error report - ORA-01722: invalid number
ヌル引数
REMAINDER()
null
を返します 引数がnull
の場合 :
SET NULL 'null';
SELECT
REMAINDER(null, 2),
REMAINDER(7, null),
REMAINDER(null, null)
FROM DUAL;
結果:
REMAINDER(NULL,2) REMAINDER(7,NULL) REMAINDER(NULL,NULL) ____________________ ____________________ _______________________ null null null
デフォルトでは、SQLclおよびSQL * Plusは、SQL SELECT
の結果としてnull値が発生するたびに空白を返します。 声明。
ただし、SET NULL
は使用できます 返される別の文字列を指定します。ここでは、文字列null
を指定しました 返却する必要があります。
引数がありません
REMAINDER()
を呼び出す 引数の数が間違っているか、引数がない場合、エラーが発生します:
SELECT REMAINDER()
FROM DUAL;
結果:
Error starting at line : 1 in command - SELECT REMAINDER() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action:
そして:
SELECT REMAINDER(10, 2, 3)
FROM DUAL;
結果:
Error starting at line : 1 in command - SELECT REMAINDER(10, 2, 3) FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: