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ězecnull
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: