Začínám s MySQL 14. – vestavěné funkce, část druhá

V předchozím díle jsem začal povídání o vestavěných funkcích. V dnešním díle bych rád tuto kapitolu dokončil povídáním o funkcích, které mají něco do činění s datumem a časem.
Funkce pro práci s datumem a časem

V jednom z předchozích dílů jsem uvedl, že MySQL má bohatý výčet datových typů, které slouží k uchovávání datumu a času. Nyní si ve stručnosti ukážeme, jak se s poli obsahující datum nebo čas dá efektivně pracovat za pomocí funkcí.

Funkce pro práci s dny

Tato část funkcí vrací z datumu den v týdnu, měsíci, roku… apod. Nejčastěji je setkáte s následujícími funkcemi:
Syntaxe funkce Popis
DAYOFWEEK(datum) Vrací číslo dne v týdnu. (1 = neděle, 2 = pondělí,…. 7 = sobota)
WEEKDAY(datum) Vrací číslo dne v týdnu (0 = pondělí, 1 = úterý,… 6 = sobota)
DAYOFMONTH(datum) Vrací číslo dne v měsíci (interval 1 – 31).
DAYOFYEAR(datum) Vrací den v roce (interval 1 – 366)

Myslím, že samotný název funkcí mluví za vše. Zde vás může trochu zarazit fakt, že funkce DAYOFWEEK a WEEKDAY jsou funkčně totožné, ale každá z nich vrací pro jednotlivé dny v týdnu jiné číslo. Na toto pozor! Často se tyto funkce berou jako ekvivalentní, a jsou proto ve výsledku častým zdrojem chyb. Kterou z nich si tedy vybrat? Doporučuji raději využívat funkci DAYOFWEEK, která koresponduje s ODBC standardem.

Příklad:

SELECT DAYOFWEEK (`1998-02-03`);

Výstupem bude číslo 3 tj. úterý. Jak již víte z dřívějška, MySQL je celkem benevolentní k zápisu datumu. Zápisy (‘1998-02-03‘), (‘1998.02.03‘) či (‘19980203‘) jsou tudíž ekvivalentní. Totožný je zápis i u ostatních funkcí.

Funkce pro práci s názvy dnů a měsíců

Do této kategorie spadají „pouze“ dvě funkce:

Syntaxe Popis
DAYNAME(datum) Vrací den v týdnu (slovně).
MONTHNAME(datum) Vrací měsíc (slovně).

Tyto funkce, jak jste již možná zjistili, moc nevyužijete. Obě totiž vracejí text v angličtině (např. „Monday“), a tak budete nejspíš místo nich využívat ty, které jsem uvedl o odstavec výše. Výčet těchto funkcí jsem uvedl spíše pro úplnost.

Funkce pro práci s týdny, měsíci, čtvrtletími a roky

Tyto funkce pracují obdobně jako funkce, které mají co do činění s dny, tj. vrací číselnou hodnotu, která reprezentuje určitý údaj, např. číslo měsíce … apod. Přehled těchto funkcí naleznete v následující tabulce:

Syntaxe Popis
WEEK(datum) Vrací číslo týdne v roce (interval 0 až 53).
WEEK(datum, první_den) Vrací číslo týdne v roce (interval 0 až 53) s určením prvního dne v týdnu.
MONTH(datum) Vrací číslo měsíce v roce (interval 1 až 12).
QUARTER(datum) Vrací číslo čtvrtletí v roce (interval 1 až 4)
YEAR(datum) Vrací rok.

Význam funkcí je opět vcelku jasně pochopitelný až na funkci WEEK. Tato funkce může mít jeden nebo dva parametry. Jak mnozí víte, podle anglického kalendáře začíná týden nedělí. Pokud – dejme tomu – byl 2. leden 1982 sobota (pozn: nejspíš nebyl), bude jako výsledek funkce WEEK s jedním parametrem vrácena 0, tj. nultý týden. Pokud však uvedeme jako „startovní den“ sobotu (tj. č. 6), je navrácen první týden. Příklad:

SELECT WEEK(‘1982-01-02‘, 6);

Funkce pro práci s časem

Jako existují funkce pro práci s datem, tak podobné existují i pro práci s časem.

Syntaxe Popis
SECOND(čas) Vrací sekundu z formátu času (interval 0 až 59)
MINUTE(čas) Vrací minutu z formátu času (interval 0 až 59).
HOUR(čas) Vrací hodinu z formátu času (interval 0 až 23).

Příklad:

SELECT MINUTE(`98-02-03 10:05:03`);

Z předcházejícího příkladu je jasně patrné, že jako parametr funkce můžete uvést jak samotný čas, tak i kombinaci datumu a času.

Vygenerování aktuálního datumu a času

Velice často jste postaveni před „problém“, jak co nejlépe a nejefektivněji vygenerovat aktuální čas, datum nebo kombinaci obojího. Jak uvidíte na následujících příkladech, můžete to s klidným svědomím nechat na MySQL.

Syntaxe Popis
NOW() Vrací aktuální datum a čas.
SYSDATE() Vrací aktuální datum a čas.
CURRENT_TIMESTAMP Vrací aktuální datum a čas.
CURTIME() Vrací aktuální čas.
CURRENT_TIME Vrací aktuální čas.
CURDATE() Vrací aktuální datum.
CURRENT_DATE() Vrací aktuální datum.

Použití je opět velice snadné. Například funkce NOW() vrátí aktuální datum a čas ve formátu YYYY-MM-DD HH:MM:SS. Pokud byste chtěli vygenerovat aktuální datum a čas ve formátu YYYYMMDDHHMMSS, pak napíšete NOW()+0. U ostatních funkcí se postupuje ekvivalentně.

Formátování data a času

Asi nejdůležitější věcí, která je spojena se všemi funkcemi, je výstup. Bez dobrého výstupu jsou veškerá shromažďovaná data absolutně nepoužitelná. U výstupu údajů o datu a času to platí dvojnásob. Nejspíš právě proto má MySQL tak bohaté možnosti. V souvislosti s formátováním se v MySQL můžete setkat se dvěmi funkcemi. Konkrétně se jedná o DATE_FORMAT(datum, formát) a TIME_FORMAT(čas, formát). První parametr udává datum resp. čas a druhý parametr formátování. K formátování můžete využít bohatou kolekci hodnot – viz následující tabulka:

Hodnota Popis
%M Název měsíce – ovšem anglicky (January, February... atd.)
%W Den v týdnu – ovšem anglicky (Sunday, Monday... atd.)
%D Den v měsíci ve formátu anglické číslovky (1st, 2nd, 3rd... atd.)
%Y Rok ve čtyřmístném formátu (např. 2001)
%y Rok ve dvoumístném formátu (např. 01)
%X & %V Rok a číslo týdne v roce. Neděle je brána jako první den v týdnu.
%x & %v Rok a číslo týdne v roce. Zde je bráno pondělí jako první den v týdnu.
%a Zkrácený název dne v týdnu – ovšem anglicky (např. Sun, Mon... atd.)
%d Den v měsíci (rozmezí 00-31)
%e Den v měsíci (rozmezí 0-31)
%m Měsíc (rozmezí 01-12)
%c Měsíc (rozmezí 1-12)
%b Zkrácený název měsíce – ovšem anglicky (např. Jan, Feb... atd.)
%j Den v roce (rozmezí 001-366)
%H Hodina (rozmezí 00-23)
%k Hodina (rozmezí 0-23)
%h Hodina (rozmezí 01-12)
%I Hodina (rozmezí 01-12)
%l Hodina (rozmezí 1-12)
%i Minuta (rozmezí 00-59)
%r Tzv. dvanáctihodinový formát času (HH:MM:SS [AP]M)
%T Tzv. čtyřiadvacetihodinový formát času (HH:MM:SS)
%S Sekunda (00-59)
%s Sekunda (00-59)
%p AM nebo PM
%w Den v týdnu (rozmezí 0-6, 0 = Sunday...atd.)
%U Číslo týdne v roce (rozmezí 0-53). Jako první den v týdnu je brána neděle.
%u Číslo týdne v roce (rozmezí 0-53). Jako první den v týdnu je bráno pondělí.
%% Literál %.
Jak vidíte, seznam hodnot je velice bohatý, a je tedy pouze na vás, které použijete. Pro ilustraci uvedu pár příkladů:

SELECT DATE_FORMAT(`1997-10-04 22:23:00`, `%H:%i:%s`);

Výsledek: `22:23:00`

SELECT DATE_FORMAT(`1999-01-01`, `%X %V`);

Výsledek: `1998 52`

Obdobným způsobem se používá i funkce TIME_FORMAT.

Závěr

Možnosti použití funkcí pro práci s datumem a časem jsou daleko bohatší. Nebylo mou snahou popsat všechny možnosti. To by totiž samo o sobě dalo na menší seriál. Myslím ale, že jsem shrnul alespoň to podstatné. To by bylo tedy pro dnešek vše. Příště vám povím něco o zámcích a klíčích.
Diskuze (3) Další článek: Winamp 3.0 Beta 2 cold

Témata článku: Software, Programování, Syntax, Následující měsíc, První parametr, Vesta, Následující rok, Následující minuta, MySQL, Fun, První funkce, Select, První minuta, Druh, Funkce, Week, Mys, Bohatý výčet, Brána, Následující den, První hodina, První měsíc


Určitě si přečtěte

Apple Macbook Air M1: testujeme výkon, výdrž, a hlavně kompatibilitu aplikací [průběžně aktualizováno]

Apple Macbook Air M1: testujeme výkon, výdrž, a hlavně kompatibilitu aplikací [průběžně aktualizováno]

** Testujeme Apple Macbook Air s procesorem M1 ** Zajímá nás nejen výkon, ale zejména kompatibilita aplikací ** Článek je průběžně doplňován na základě vašich dotazů

Jiří Kuruc | 205

Jiří Kuruc
Apple
Šéf Spotify: Budeme zdražovat. Náš obsah se zlepšil
Markéta Mikešová
PředplatnéSpotify
Lidl buduje chytrou domácnost, propojí všechno se vším
Lukáš Václavík
LidlChytrá domácnostIoT
Archivovat data do cloudu, na HDD, SSD, DVD, nebo Blu-ray? Co je nejvýhodnější?

Archivovat data do cloudu, na HDD, SSD, DVD, nebo Blu-ray? Co je nejvýhodnější?

** Kam doma natrvalo uložit data? Vyplatí se ještě optická média? ** Jaké kapacity disků a médií má smysl koupit? ** Cenovou výhodnost si ukážeme na příkladech s 2TB úložištěm

Lukáš Václavík | 118

Lukáš Václavík
ZálohováníÚložištěPevné disky
Vybíráme nejlepší monitory: Od úplně levných až po displeje na rozmazlování očí

Vybíráme nejlepší monitory: Od úplně levných až po displeje na rozmazlování očí

** Vybrali jsme nejlepší monitory na práci i pořádné hraní ** Nejlevnější monitor s kvalitním panelem nestojí ani tři tisíce ** Rozlišení 4K a větší obrazovka už není nedostupný luxus

David Polesný | 30

David Polesný
Monitory
Nejlepší notebooky do 10 000 korun: Co má ještě smysl kupovat. A co ne?

Nejlepší notebooky do 10 000 korun: Co má ještě smysl kupovat. A co ne?

** Notebooky s cenou do deseti tisíc korun jsou plné kompromisů ** Existuje několik modelů dobře použitelných pro nenáročné použití ** Vhodnou alternativou jsou tablety nebo repasované počítače

David Polesný | 94

David Polesný
Jak vybrat notebookNotebooky
Dostali jste nový počítač? Tohle s ním udělejte, než ho začnete používat

Dostali jste nový počítač? Tohle s ním udělejte, než ho začnete používat

** Každý nový počítač si zaslouží počáteční péči ** Odinstalujte bloatware a nezapomeňte na vhodné nastavení ** Poradíme, jak se o počítač s Windows 10 postarat

David Polesný, Stanislav Janů | 71

David PolesnýStanislav Janů
PočítačeNotebooky
Elon Musk podpořil Signal jako náhradu WhatsAppu. Aplikaci okamžitě zavalili uživatelé
Markéta Mikešová
WhatsAppElon MuskFacebook

Aktuální číslo časopisu Computer

Jak prodloužit výdrž notebooku

Velké testy: gamepady a inkoustové tiskárny

Důkladný test Sony Playstation 5