sql >> Database >  >> RDS >> Oracle

REMAINDER() Functie in Oracle

In Oracle, de REMAINDER() functie retourneert de rest van zijn eerste argument gedeeld door zijn tweede.

Het is vergelijkbaar met de MOD() functie, behalve dat het ROUND() . gebruikt in zijn berekening, terwijl MOD() gebruikt FLOOR() in zijn berekening.

Syntaxis

De syntaxis gaat als volgt:

REMAINDER(n2, n1)

Elk argument kan elk numeriek gegevenstype zijn of elk niet-numeriek gegevenstype dat impliciet kan worden geconverteerd naar een numeriek gegevenstype.

Voorbeeld

Hier is een voorbeeld:

SELECT REMAINDER(100, 6)
FROM DUAL;

Resultaat:

   REMAINDER(100,6) 
___________________ 
                 -2 

REMAINDER() vs MOD()

Het bovenstaande resultaat kan onverwacht lijken, vooral in vergelijking met de MOD() functie. Maar dit komt omdat MOD() gebruikt de FLOOR() functie in zijn formule, terwijl REMAINDER() gebruikt de ROUND() functie.

Hier zijn de twee functies vergeleken:

SELECT 
    REMAINDER(100, 6),
    MOD(100, 6)
FROM DUAL;

Resultaat:

   REMAINDER(100,6)    MOD(100,6) 
___________________ _____________ 
                 -2             4

In dit geval krijgen we enorm verschillende resultaten van de twee functies, ook al retourneren ze allebei de rest van het eerste argument gedeeld door het tweede.

Wat is er aan de hand?

Misschien is de gemakkelijkste manier om erover na te denken als volgt:

SELECT 
    100/6,
    ROUND(100/6) AS "ROUND()",
    FLOOR(100/6) AS "FLOOR()"
FROM DUAL;

Resultaat:

     100/6    ROUND()    FLOOR()
---------- ---------- ----------
16.6666667         17         16

In dit geval krijgen we een ander resultaat, afhankelijk van of we ROUND() . gebruiken of FLOOR() .

  • Als we 17 met 6 vermenigvuldigen, krijgen we 102. Dit geeft ons een rest van -2.
  • Als we 16 met 6 vermenigvuldigen, krijgen we 96. Dit geeft ons een rest van 4.

Als we de 6 . wijzigen naar een 7 , beide functies geven hetzelfde resultaat:

SELECT 
    REMAINDER(100, 7),
    MOD(100, 7)
FROM DUAL;

Resultaat:

   REMAINDER(100,7)    MOD(100,7) 
___________________ _____________ 
                  2             2 

En dit is wat ROUND() en FLOOR() retour:

SELECT 
    100/7,
    ROUND(100/7) AS "ROUND()",
    FLOOR(100/7) AS "FLOOR()"
FROM DUAL;

Resultaat:

     100/7    ROUND()    FLOOR()
---------- ---------- ----------
14.2857143         14         14

Niet-numerieke argumenten

De argumenten kunnen elk numeriek gegevenstype zijn of elk niet-numeriek gegevenstype dat impliciet kan worden geconverteerd naar een numeriek gegevenstype.

Hier is een voorbeeld van wat er gebeurt als de argumenten niet aan die criteria voldoen:

SELECT REMAINDER('Ponzi', 'Invest')
FROM DUAL;

Resultaat:

Error starting at line : 1 in command -
SELECT REMAINDER('Ponzi', 'Invest')
FROM DUAL
Error report -
ORA-01722: invalid number

Nullargumenten

REMAINDER() retourneert null als een argument null is :

SET NULL 'null';

SELECT 
    REMAINDER(null, 2),
    REMAINDER(7, null),
    REMAINDER(null, null)
FROM DUAL;

Resultaat:

   REMAINDER(NULL,2)    REMAINDER(7,NULL)    REMAINDER(NULL,NULL) 
____________________ ____________________ _______________________ 
                null                 null                    null

Standaard retourneren SQLcl en SQL*Plus een spatie wanneer een null-waarde optreedt als resultaat van een SQL SELECT uitspraak.

U kunt echter SET NULL . gebruiken om een ​​andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null moet worden geretourneerd.

Ontbrekende argumenten

REMAINDER() . aanroepen met het verkeerde aantal argumenten, of zonder argumenten resulteert in een fout:

SELECT REMAINDER()
FROM DUAL;

Resultaat:

Error starting at line : 1 in command -
SELECT REMAINDER()
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:

En:

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

Resultaat:

Error starting at line : 1 in command -
SELECT REMAINDER(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. Tabel maken met het datumstempel

  2. Hoe GREATEST() werkt in MariaDB

  3. MAAND() Voorbeelden in SQL Server (T-SQL)

  4. Heerlijk eten (en gegevens) serveren - een gegevensmodel voor restaurants