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: