MS Access - Aritmetické funkce

8. 7. 2014, Vladimír Klaus, přečteno 3112x

MS Access
SQL

Mezi dalšími funkcemi nesmí chybět ani ty základní aritmetické. Začneme tím nejjednodušším – sčítáním. I když na sčítání se dá dívat jako na opravdové sčítání čísel, nebo na spojování textů, případně kombinaci obojího.

Pokud máme dva texty, můžeme je opravdu velice snadno sečíst.

SELECT "Název: " + Nazev FROM Produkty

Aritmetické funkce 1

Dále je možné řetězce spojit pomocí „&“, což je někdy dokonce nutnost. Tím případem je, když sčítáme text a číslo.

SELECT "Cena: " & Cena & "Kč" FROM Produkty

Aritmetické funkce 2

V jiných databázích je sčítání vyhrazeno opravdu jen na sčítání čísel, a pokud potřebujete spojit textové řetězce, pak k tomu slouží dvě svislítka - ||.

SELECT "Název: " || Nazev FROM Produkty

A aby toho nebylo málo, tak třeba pro SQL Server nebo MySQL se používá spojovací funkce CONCAT().

SELECT CONCAT('Název: ', Nazev) FROM Produkty

Odčítání, násobení a dělení textů je pochopitelně nesmysl, takže pro tyto operace mají význam už jen čísla. I když u nich zase můžete bojovat s rozsahem nebo přesností. V následujícím příkladu si ukážeme, jak může malá přesnost ovlivnit výpočty.

Nejprve použijeme tabulku Aritmetika a naplníme její sloupce jednou sedminou z Částky. Máme tam tedy sloupce s jednoduchou přesností, s dvojitou přesností a pak také typu Měna.

UPDATE Aritmetika SET UdajJednoduchy=Castka/7, UdajDvojity=Castka/7,
  UdajMena=Castka/7

Aritmetické funkce 3

Nyní se pokusíme dostat zpět na výchozí částku a hned vidíte, jak jednoduchá přesnost výsledek ovlivnila.

SELECT Castka, UdajJednoduchy*7, UdajDvojity*7, UdajMena*7
  FROM Aritmetika

Aritmetické funkce 4

V tomto případě to nevadí, částku můžeme v pohodě zaokrouhlit na dvě desetinná místa, ale v případě nějakých technických výpočtů by to už byl docela velký problém.

SELECT Castka, ROUND(UdajJednoduchy*7, 2), UdajDvojity*7
  FROM Aritmetika

Z obrázku dále vyplývá, že ani údaj typu Měna nemusí být žádná výhra. Tento typ ukládá čísla pouze s přesností na 4 desetinná místa, což je dost pro údaj jako takový, ale vůbec to nemusí stačit, pokud byste prováděli nějaké výpočty. Výsledek bude ještě méně přesný než při použití údaje s jednoduchou přesností, jenže Access to před vámi skryje – vidět je to pouze při úpravě hodnoty – na obrázku v poli s údajem 799,0003.

A na závěr ještě malý praktický příklad. Předpokládejme, že máte v tabulce s produkty uvedené ceny s DPH a ono došlo ke změně sazby – z 20 % na 21 %. Jak provést změnu cen? Pozor – tento příkaz můžete spustit jen jednou, proto bych doporučoval nejprve provést pracovní výběr.

SELECT Cena, ROUND(Cena/1.20*1.21, 2) AS NovaCena FROM Produkty

Aritmetické funkce 5

Ono totiž zjistíte, že nové ceny jsou dost ošklivé a bude lepší je nastavit ručně na nové hodnoty a zpětně z nich odvodit případnou cenu bez DPH. Ale když vám to nevadí, tak pak takto aktualizujte údaje v tabulce.

UPDATE Produkty SET Cena=ROUND(Cena/1.20*1.21, 2)

Aritmetické funkce 6