sql >> Base de Datos >  >> RDS >> Oracle

Función MOD() en Oracle

En Oracle, el MOD() La función devuelve la operación de módulo. En otras palabras, devuelve el resto de su primer argumento dividido por su segundo.

Sintaxis

La sintaxis es así:

MOD(n2, n1)

Cada argumento puede ser cualquier tipo de dato numérico o cualquier tipo de dato no numérico que se pueda convertir implícitamente a un tipo de dato numérico.

Ejemplo

He aquí un ejemplo:

SELECT MOD(100, 6)
FROM DUAL;

Resultado:

   MOD(100,6) 
_____________ 
            4

Oracle MOD() frente a módulo clásico

MOD() de Oracle se comporta de manera diferente a la función de módulo matemático clásico, si el producto de n1 y n2 es negativo.

Aquí hay un ejemplo que demuestra cómo cada uno de estos difiere:

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;

Resultado:

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

Argumentos no numéricos

Los argumentos pueden ser cualquier tipo de dato numérico o cualquier tipo de dato no numérico que se pueda convertir implícitamente a un tipo de dato numérico.

Aquí hay un ejemplo de lo que sucede cuando los argumentos no satisfacen ese criterio:

SELECT MOD('Homer', 'Symptom')
FROM DUAL;

Resultado:

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

Argumentos nulos

MOD() devuelve null si algún argumento es null :

SET NULL 'null';

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

Resultado:

   MOD(NULL,16)    MOD(1024,NULL)    MOD(NULL,NULL) 
_______________ _________________ _________________ 
           null              null              null 

De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que se produce un valor nulo como resultado de un SQL SELECT declaración.

Sin embargo, puede usar SET NULL para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null debe ser devuelto.

Argumentos faltantes

Llamando a MOD() con el número incorrecto de argumentos, o sin ningún argumento da como resultado un error:

SELECT MOD()
FROM DUAL;

Resultado:

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:

Y:

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

Resultado:

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: