3.2 Funkcie pre čísla
V databázach je práca s číslami azda najčastejšou operáciou, obzvlášť pri zbere a vyhodnocovaní údajov z oblasti IoT. S bežnými matematickými operátormi (+, -, *, /) sme sa zoznámili už v kapitole 2.5 Výberový dopyt, no SQL nám ponúka aj mnoho numerických a matematických funkcií.
PostgreSQL pri delení čísel uplatňuje rovnaké pravidlá ako C++, teda pokiaľ je delenec i deliteľ celé číslo, vykoná sa celočíselné delenie!
Funkcie zaokrúhľovania
Už pri delení číselných hodnôt sme si mohli všimnúť, že SQL to vcelku preháňa s počtom desatinných miest. Máme viac funkcií, ktoré nám s nimi pomôžu:
- ROUND({číslo}): číslo zaokrúhli na najbližšie celé číslo;
- ROUND({číslo}, {počet}): číslo zaokrúhli na zadaný počet desatinných miest, ten môže byť aj záporný;
- FLOOR({číslo}): číslu odstráni desatinné miesta (zaokrúhli nadol);
- TRUNC({číslo}, {počet}): číslo zaokrúhli nadol na zadaný počet desatinných miest, ten môže byť aj záporný,
- v MySQL/MariaDB sa používa zápis TRUNCATE({číslo}, {počet});
- CEIL({číslo}): číslo zaokrúhli nahor.
SELECT ROUND(172.16, 1); -- zaokrúhli na 172.2
SELECT FLOOR(7.95); -- zaokrúhli nadol na 7
SELECT CEIL(3.1416); -- zaokrúhli nahor na 4
Čo vlastne znamená záporný počet desatinných miest?
Kým kladný počet desatinných miest sa týka číslic za desatinnou čiarkou (desatín, stotín, tisícin, …), záporný počet sa týka číslic pred desatinnou čiarkou (desiatok, stoviek, tisícok, …). Umožňuje nám upraviť číslo na násobky 10, 100, 1000.
-- záporný počet desatinných miest
SELECT ROUND(172.16, -1); -- zaokrúhli na 170
SELECT ROUND(172.16, -2); -- zaokrúhli na 200
Je možné zaokrúhliť na požadovaný počet desatinných miest alebo rádov aj v prípade, že to funkcia neumožňuje?
Samozrejme, stačí použiť jednoduchú matematiku - číslo vydeliť (vynásobiť) násobkom 10 ešte pred zaokrúhlením a následne výsledok vynásobiť (vydeliť) tým istým číslom.
-- desatinné miesta aj pre FLOOR a CEIL
SELECT FLOOR(3.1416 * 1000) / 1000.; -- na 3 desatinné miesta je 3.141
SELECT CEIL(3.1416 * 100) / 100.; -- na 2 desatinné miesta je 3.15
SELECT FLOOR(172.16 / 100) * 100; -- na stovky je 100
SELECT CEIL(172.16 / 10) * 10; -- na desiatky je 180
Bodky za deliteľmi vo vyššie uvedených výrazoch majú svoj zmysel - nimi sa vyhneme celočíselnému deleniu v PostgreSQL.
Matematické funkcie
Funkcie pre matematické operácie sú zväčša rovnaké, ako v bežných programovacích jazykoch.
- MOD({číslo}, {deliteľ}): vráti zvyšok po delení čísla deliteľom;
- ABS({číslo}): vráti absolútnu hodnotu čísla;
- POWER({číslo}, {exponent}): vráti mocninu čísla stupňa {exponent}, tým môže byť aj reálne číslo / zlomok;
- SQRT({číslo}): vráti druhú odmocninu čísla;
- LOG({základ}, {číslo}): vráti logaritmus čísla so zadaným základom.
Jednoduchý príklad pre logaritmus: 2 na koľkú je 256? → LOG(2, 256)