sql >> Database teknologi >  >> RDS >> Oracle

REMAINDER() Funktion i Oracle

I Oracle er REMAINDER() funktion returnerer resten af ​​dets første argument divideret med dets andet.

Det ligner MOD() funktion, bortset fra at den bruger ROUND() i sin beregning, hvorimod MOD() bruger FLOOR() i sin beregning.

Syntaks

Syntaksen ser sådan ud:

REMAINDER(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 REMAINDER(100, 6)
FROM DUAL;

Resultat:

   REMAINDER(100,6) 
___________________ 
                 -2 

REMAINDER() vs MOD()

Ovenstående resultat kan se ud til at være uventet, især sammenlignet med MOD() fungere. Men det er fordi MOD() bruger FLOOR() funktion i sin formel, mens REMAINDER() bruger ROUND() fungere.

Her er de to funktioner sammenlignet:

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

Resultat:

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

I dette tilfælde får vi vidt forskellige resultater fra de to funktioner, selvom de begge returnerer resten af ​​dets første argument divideret med dets andet.

Hvad sker der?

Måske er den nemmeste måde at tænke på sådan her:

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

Resultat:

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

I dette tilfælde får vi et andet resultat, afhængigt af om vi bruger ROUND() eller FLOOR() .

  • Hvis vi ganger 17 med 6, får vi 102. Dette giver os en rest på -2.
  • Hvis vi ganger 16 med 6, får vi 96. Dette giver os en rest på 4.

Hvis vi ændrer 6 til en 7 , returnerer begge funktioner det samme resultat:

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

Resultat:

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

Og her er hvad ROUND() og FLOOR() returnere:

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

Resultat:

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

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 REMAINDER('Ponzi', 'Invest')
FROM DUAL;

Resultat:

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

Nul-argumenter

REMAINDER() returnerer null hvis et argument er null :

SET NULL 'null';

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

Resultat:

   REMAINDER(NULL,2)    REMAINDER(7,NULL)    REMAINDER(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 REMAINDER() med det forkerte antal argumenter eller uden argumenter resulterer i en fejl:

SELECT REMAINDER()
FROM DUAL;

Resultat:

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:

Og:

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

Resultat:

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. SQL Server Database Snapshots -4

  2. 2 måder at aktivere ordombrydning i SQLite

  3. Hvordan eksporteres forespørgselsresultat til csv i Oracle SQL Developer?

  4. Hvordan skal jeg gemme en GUID i Oracle?