I Oracle, MOD()
funktion returnerar modulo-operationen. Med andra ord returnerar den resten av sitt första argument dividerat med det andra.
Syntax
Syntaxen ser ut så här:
MOD(n2, n1)
Varje argument kan vara vilken numerisk datatyp som helst eller vilken icke-numerisk datatyp som helst som implicit kan konverteras till en numerisk datatyp.
Exempel
Här är ett exempel:
SELECT MOD(100, 6)
FROM DUAL;
Resultat:
MOD(100,6) _____________ 4
Oracle MOD() vs klassisk modul
Oracles MOD()
funktion beter sig annorlunda än den klassiska matematiska modulfunktionen, om produkten av n1
och n2
är negativ.
Här är ett exempel som visar hur var och en av dessa skiljer sig:
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;
Resultat:
Oracle MOD() Classical
____________ _________
4 4
4 -2
-4 2
-4 -4
Icke-numeriska argument
Argumenten kan vara vilken numerisk datatyp som helst eller vilken icke-numerisk datatyp som helst som implicit kan konverteras till en numerisk datatyp.
Här är ett exempel på vad som händer när argumenten inte uppfyller dessa kriterier:
SELECT MOD('Homer', 'Symptom')
FROM DUAL;
Resultat:
Error starting at line : 1 in command - SELECT MOD('Homer', 'Symptom') FROM DUAL Error report - ORA-01722: invalid number
Nollargument
MOD()
returnerar null
om något argument är null
:
SET NULL 'null';
SELECT
MOD(null, 16),
MOD(1024, null),
MOD(null, null)
FROM DUAL;
Resultat:
MOD(NULL,16) MOD(1024,NULL) MOD(NULL,NULL) _______________ _________________ _________________ null null null
Som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när ett nollvärde inträffar som ett resultat av en SQL SELECT
påstående.
Du kan dock använda SET NULL
för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null
bör returneras.
Argument saknas
Anropar MOD()
med fel antal argument, eller utan några argument resulterar i ett fel:
SELECT MOD()
FROM DUAL;
Resultat:
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:
Och:
SELECT MOD(10, 2, 3)
FROM DUAL;
Resultat:
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: