sql >> Databasteknik >  >> RDS >> Oracle

MOD() Funktion i Oracle

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:

  1. Kan jag skriva PostgreSQL-funktioner på Ruby on Rails?

  2. Importera CSV-data med PHP/MySQL

  3. Hur skickar jag Java List of Objects till Oracle Stored Procedur med MyBatis?

  4. Patchhistoriktabeller i Oracle Apps (11i/R12.1/R12.2)