Oracle
 sql >> Datenbank >  >> RDS >> Oracle

REMAINDER()-Funktion in Oracle

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: