Oracle
 sql >> Database >  >> RDS >> Oracle

REMAINDER() Funzione in Oracle

In Oracle, il REMAINDER() funzione restituisce il resto del suo primo argomento diviso per il secondo.

È simile a MOD() funzione, tranne per il fatto che utilizza ROUND() nel suo calcolo, mentre MOD() utilizza FLOOR() nel suo calcolo.

Sintassi

La sintassi è questa:

REMAINDER(n2, n1)

Ogni argomento può essere qualsiasi tipo di dati numerico o qualsiasi tipo di dati non numerico che può essere convertito in modo implicito in un tipo di dati numerico.

Esempio

Ecco un esempio:

SELECT REMAINDER(100, 6)
FROM DUAL;

Risultato:

   REMAINDER(100,6) 
___________________ 
                 -2 

REMAINDER() rispetto a MOD()

Il risultato di cui sopra potrebbe sembrare inaspettato, specialmente se confrontato con MOD() funzione. Ma questo perché MOD() usa il FLOOR() funzione nella sua formula, mentre REMAINDER() usa il ROUND() funzione.

Ecco le due funzioni a confronto:

SELECT 
    REMAINDER(100, 6),
    MOD(100, 6)
FROM DUAL;

Risultato:

   REMAINDER(100,6)    MOD(100,6) 
___________________ _____________ 
                 -2             4

In questo caso, otteniamo risultati molto diversi dalle due funzioni, anche se entrambe restituiscono il resto del primo argomento diviso per il secondo.

Cosa sta succedendo?

Forse il modo più semplice per pensarci è questo:

SELECT 
    100/6,
    ROUND(100/6) AS "ROUND()",
    FLOOR(100/6) AS "FLOOR()"
FROM DUAL;

Risultato:

     100/6    ROUND()    FLOOR()
---------- ---------- ----------
16.6666667         17         16

In questo caso otteniamo un risultato diverso, a seconda che utilizziamo ROUND() o FLOOR() .

  • Se moltiplichiamo 17 per 6, otteniamo 102. Questo ci dà un resto di -2.
  • Se moltiplichiamo 16 per 6, otteniamo 96. Questo ci dà un resto di 4.

Se cambiamo il 6 a un 7 , entrambe le funzioni restituiscono lo stesso risultato:

SELECT 
    REMAINDER(100, 7),
    MOD(100, 7)
FROM DUAL;

Risultato:

   REMAINDER(100,7)    MOD(100,7) 
___________________ _____________ 
                  2             2 

Ed ecco cosa ROUND() e FLOOR() ritorno:

SELECT 
    100/7,
    ROUND(100/7) AS "ROUND()",
    FLOOR(100/7) AS "FLOOR()"
FROM DUAL;

Risultato:

     100/7    ROUND()    FLOOR()
---------- ---------- ----------
14.2857143         14         14

Argomenti non numerici

Gli argomenti possono essere qualsiasi tipo di dati numerico o qualsiasi tipo di dati non numerico che può essere convertito in modo implicito in un tipo di dati numerico.

Ecco un esempio di cosa succede quando gli argomenti non soddisfano quel criterio:

SELECT REMAINDER('Ponzi', 'Invest')
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT REMAINDER('Ponzi', 'Invest')
FROM DUAL
Error report -
ORA-01722: invalid number

Argomenti nulli

REMAINDER() restituisce null se un argomento è null :

SET NULL 'null';

SELECT 
    REMAINDER(null, 2),
    REMAINDER(7, null),
    REMAINDER(null, null)
FROM DUAL;

Risultato:

   REMAINDER(NULL,2)    REMAINDER(7,NULL)    REMAINDER(NULL,NULL) 
____________________ ____________________ _______________________ 
                null                 null                    null

Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che si verifica un valore nullo come risultato di un SQL SELECT dichiarazione.

Tuttavia, puoi utilizzare SET NULL per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null deve essere restituito.

Argomenti mancanti

Chiamando REMAINDER() con il numero errato di argomenti o senza argomenti genera un errore:

SELECT REMAINDER()
FROM DUAL;

Risultato:

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:

E:

SELECT REMAINDER(10, 2, 3)
FROM DUAL;

Risultato:

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: