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

Funzione MOD() in Oracle

In Oracle, il MOD() funzione restituisce l'operazione modulo. In altre parole, restituisce il resto del suo primo argomento diviso per il secondo.

Sintassi

La sintassi è questa:

MOD(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 MOD(100, 6)
FROM DUAL;

Risultato:

   MOD(100,6) 
_____________ 
            4

Oracle MOD() vs Modulo classico

MOD() di Oracle funzione si comporta in modo diverso dalla classica funzione modulo matematico, se il prodotto di n1 e n2 è negativo.

Ecco un esempio che dimostra come ognuno di questi differisce:

SELECT 
    MOD(100, 6) AS "Oracle MOD()",
    100 - 6 * FLOOR(100/6) AS "Classical"
FROM DUAL

UNION ALL

SELECT 
    MOD(100, -6),
    100 - -6 * FLOOR(100/-6)
FROM DUAL

UNION ALL

SELECT 
    MOD(-100, 6),
    -100 - 6 * FLOOR(-100/6)
FROM DUAL

UNION ALL

SELECT 
    MOD(-100, -6),
    -100 - -6 * FLOOR(-100/-6)
FROM DUAL;

Risultato:

Oracle MOD()  Classical
____________  _________
           4	      4
           4	     -2
          -4	      2
          -4	     -4

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 MOD('Homer', 'Symptom')
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT MOD('Homer', 'Symptom')
FROM DUAL
Error report -
ORA-01722: invalid number

Argomenti nulli

MOD() restituisce null se un argomento è null :

SET NULL 'null';

SELECT 
    MOD(null, 16),
    MOD(1024, null),
    MOD(null, null)
FROM DUAL;

Risultato:

   MOD(NULL,16)    MOD(1024,NULL)    MOD(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 MOD() con il numero errato di argomenti o senza argomenti genera un errore:

SELECT MOD()
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT MOD()
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 MOD(10, 2, 3)
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT MOD(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: