I Oracle er MOD()
funktion returnerer modulo-operationen. Med andre ord returnerer den resten af dets første argument divideret med dets andet.
Syntaks
Syntaksen ser sådan ud:
MOD(n2, n1)
Hvert argument kan være enhver numerisk datatype eller enhver ikke-numerisk datatype, der implicit kan konverteres til en numerisk datatype.
Eksempel
Her er et eksempel:
SELECT MOD(100, 6)
FROM DUAL;
Resultat:
MOD(100,6) _____________ 4
Oracle MOD() vs klassisk modul
Oracles MOD()
funktion opfører sig anderledes end den klassiske matematiske modulfunktion, hvis produktet af n1
og n2
er negativ.
Her er et eksempel, der viser, hvordan hver af disse adskiller 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
Ikke-numeriske argumenter
Argumenterne kan være enhver numerisk datatype eller enhver ikke-numerisk datatype, der implicit kan konverteres til en numerisk datatype.
Her er et eksempel på, hvad der sker, når argumenterne ikke opfylder disse 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
Nul-argumenter
MOD()
returnerer null
hvis et argument er 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 returnerer SQLcl og SQL*Plus et tomt mellemrum, når der opstår en null-værdi som et resultat af en SQL SELECT
udmelding.
Du kan dog bruge SET NULL
for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null
skal returneres.
Manglende argumenter
Kalder MOD()
med det forkerte antal argumenter eller uden argumenter resulterer i en fejl:
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:
Og:
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: