sql >> Databáze >  >> RDS >> Oracle

Funkce REMAINDER() v Oracle

V Oracle, REMAINDER() funkce vrátí zbytek svého prvního argumentu dělený druhým.

Je to podobné jako MOD() kromě toho, že používá ROUND() ve výpočtu, zatímco MOD() používá FLOOR() v jeho výpočtu.

Syntaxe

Syntaxe vypadá takto:

REMAINDER(n2, n1) 

Každý argument může být jakýkoli číselný datový typ nebo jakýkoli nenumerický datový typ, který lze implicitně převést na číselný datový typ.

Příklad

Zde je příklad:

SELECT REMAINDER(100, 6)
FROM DUAL; 

Výsledek:

 REMAINDER(100,6) ___________________ -2 

REMAINDER() vs MOD()

Výše uvedený výsledek se může zdát neočekávaný, zejména ve srovnání s MOD() funkce. Ale je to proto, že MOD() používá FLOOR() funkce ve svém vzorci, zatímco REMAINDER() používá ROUND() funkce.

Zde jsou dvě porovnané funkce:

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

Výsledek:

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

V tomto případě dostaneme výrazně odlišné výsledky z obou funkcí, i když obě vrátí zbytek svého prvního argumentu dělený druhým.

Co se děje?

Snad nejjednodušší způsob, jak o tom přemýšlet, je tento:

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

Výsledek:

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

V tomto případě dostaneme jiný výsledek v závislosti na tom, zda použijeme ROUND() nebo FLOOR() .

  • Pokud vynásobíme 17 6, dostaneme 102. To nám dává zbytek -2.
  • Pokud vynásobíme 16 6, dostaneme 96. Získáme tak zbytek 4.

Pokud změníme 6 na 7 , obě funkce vrátí stejný výsledek:

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

Výsledek:

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

A tady je to, co ROUND() a FLOOR() návrat:

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

Výsledek:

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

Nečíselné argumenty

Argumenty mohou být jakýkoli číselný datový typ nebo jakýkoli nenumerický datový typ, který lze implicitně převést na číselný datový typ.

Zde je příklad toho, co se stane, když argumenty nesplňují tato kritéria:

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

Výsledek:

Chyba začínající na řádku:1 v příkazu -SELECT REMAINDER('Ponzi', 'Invest')FROM DUALEchybová zpráva -ORA-01722:neplatné číslo

Nulové argumenty

REMAINDER() vrátí null pokud je nějaký argument null :

SET NULL 'null';

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

Výsledek:

 REMAINDER(NULL,2) REMAINDER(7,NULL) REMAINDER(NULL,NULL) ____________________ _____________________ __________________null_ 

Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo, kdykoli se v důsledku příkazu SQL SELECT objeví hodnota null. prohlášení.

Můžete však použít SET NULL určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězec null by měl být vrácen.

Chybí argumenty

Volání REMAINDER() s nesprávným počtem argumentů nebo bez jakýchkoli argumentů vede k chybě:

SELECT REMAINDER()
FROM DUAL; 

Výsledek:

Chyba začínající na řádku:1 v příkazu -SELECT REMAINDER()FROM DUALEchyba na příkazovém řádku:1 Sloupec:8Hlášení o chybě -Chyba SQL:ORA-00909:neplatný počet argumentů00909. 00000 - "neplatný počet argumentů"*Příčina:*Akce:

A:

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

Výsledek:

Chyba začínající na řádku:1 v příkazu -SELECT REMAINDER(10, 2, 3)FROM DUALEchyba na příkazovém řádku:1 Sloupec:8Hlášení o chybě -Chyba SQL:ORA-00909:neplatný počet argumentů00909. 00000 - "neplatný počet argumentů"*Příčina:*Akce:

  1. Bez ohledu na to vrátit výchozí výsledek pro hodnotu IN

  2. Jak zvýšit maximální počet připojení v PostgreSQL

  3. Aktualizujte více řádků ve stejném dotazu pomocí PostgreSQL

  4. Nainstalujte MySQL na Mac