In Oracle der REMAINDER()
Die Funktion gibt den Rest ihres ersten Arguments dividiert durch ihr zweites zurück.
Es ähnelt dem MOD()
Funktion, außer dass sie ROUND()
verwendet in seiner Berechnung, während MOD()
verwendet FLOOR()
in seiner Berechnung.
Syntax
Die Syntax lautet wie folgt:
REMAINDER(n2, n1)
Jedes Argument kann ein beliebiger numerischer Datentyp oder ein beliebiger nicht numerischer Datentyp sein, der implizit in einen numerischen Datentyp konvertiert werden kann.
Beispiel
Hier ist ein Beispiel:
SELECT REMAINDER(100, 6)
FROM DUAL;
Ergebnis:
REMAINDER(100,6) ___________________ -2
REMAINDER()
vs MOD()
Das obige Ergebnis mag unerwartet erscheinen, insbesondere im Vergleich zu MOD()
Funktion. Aber das liegt daran, dass MOD()
verwendet den FLOOR()
Funktion in seiner Formel, während REMAINDER()
verwendet den ROUND()
Funktion.
Hier sind die beiden Funktionen im Vergleich:
SELECT
REMAINDER(100, 6),
MOD(100, 6)
FROM DUAL;
Ergebnis:
REMAINDER(100,6) MOD(100,6) ___________________ _____________ -2 4
In diesem Fall erhalten wir sehr unterschiedliche Ergebnisse von den beiden Funktionen, obwohl beide den Rest ihres ersten Arguments dividiert durch ihr zweites zurückgeben.
Was ist los?
Vielleicht ist die einfachste Art, darüber nachzudenken, so:
SELECT
100/6,
ROUND(100/6) AS "ROUND()",
FLOOR(100/6) AS "FLOOR()"
FROM DUAL;
Ergebnis:
100/6 ROUND() FLOOR() ---------- ---------- ---------- 16.6666667 17 16
In diesem Fall erhalten wir ein anderes Ergebnis, je nachdem, ob wir ROUND()
verwenden oder FLOOR()
.
- Wenn wir 17 mit 6 multiplizieren, erhalten wir 102. Das ergibt einen Rest von -2.
- Wenn wir 16 mit 6 multiplizieren, erhalten wir 96. Das ergibt einen Rest von 4.
Wenn wir die 6
ändern zu einem 7
, geben beide Funktionen dasselbe Ergebnis zurück:
SELECT
REMAINDER(100, 7),
MOD(100, 7)
FROM DUAL;
Ergebnis:
REMAINDER(100,7) MOD(100,7) ___________________ _____________ 2 2
Und hier ist was ROUND()
und FLOOR()
zurück:
SELECT
100/7,
ROUND(100/7) AS "ROUND()",
FLOOR(100/7) AS "FLOOR()"
FROM DUAL;
Ergebnis:
100/7 ROUND() FLOOR() ---------- ---------- ---------- 14.2857143 14 14
Nicht numerische Argumente
Die Argumente können ein beliebiger numerischer Datentyp oder ein beliebiger nicht numerischer Datentyp sein, der implizit in einen numerischen Datentyp konvertiert werden kann.
Hier ist ein Beispiel dafür, was passiert, wenn die Argumente dieses Kriterium nicht erfüllen:
SELECT REMAINDER('Ponzi', 'Invest')
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT REMAINDER('Ponzi', 'Invest') FROM DUAL Error report - ORA-01722: invalid number
Null-Argumente
REMAINDER()
gibt null
zurück wenn irgendein Argument null
ist :
SET NULL 'null';
SELECT
REMAINDER(null, 2),
REMAINDER(7, null),
REMAINDER(null, null)
FROM DUAL;
Ergebnis:
REMAINDER(NULL,2) REMAINDER(7,NULL) REMAINDER(NULL,NULL) ____________________ ____________________ _______________________ null null null
Standardmäßig geben SQLcl und SQL*Plus immer dann ein Leerzeichen zurück, wenn als Ergebnis eines SQL SELECT
ein Nullwert auftritt Erklärung.
Sie können jedoch SET NULL
verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Hier habe ich angegeben, dass der String null
zurückgegeben werden soll.
Fehlende Argumente
Aufruf von REMAINDER()
mit der falschen Anzahl von Argumenten oder ohne Argumente führt zu einem Fehler:
SELECT REMAINDER()
FROM DUAL;
Ergebnis:
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:
Und:
SELECT REMAINDER(10, 2, 3)
FROM DUAL;
Ergebnis:
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: