Práce s časem a datem v MySQL

MySQL má spoustu užitečných funkcí pro manipulaci s datem a časem, které mohou programátorovi ušetřit spoustu času. Tady bych chtěl ukázat některé praktické příklady jejich použití.

Datové typy

Date
Datový typ Date uloží datum ve formát ‚YYYY-MM-DD‘. Povolený rozsah je od 100001-01 do 9999-12-31.
Datetime
Datový typ Datetime obsahuje datum a čas ve formátu ‚YYYY-MM-DD HH:MM:SS‘. Povolený rozsah je od 1000-01-01 00:00:00 do 9999-12-31 23:59:59.
Time
Datový typ Time obsahuje čas ve formátu ‚HH:MM:SS‘. Povolený rozsah je od −838:59:59 do 838:59:59.
Year
Datový typ Year obsahuje rok. Může být dvou nebo čtyřciferný. Pokud je dvouciferný, tak povolený rozsah hodnot je od 70 do 69 (roky 1970–1969). Čtyřciferný formát (defaultní) umožňuje uložit hodnoty v rozsahu 1901–2155 a 0000.
Timestamp
Timestamp umožňuje uložit datum ve formátu 1970-01-01 00:00:00 až do roku 2037. Tento datový typ je velmi užitečný pro zaznamenávání času operací INSERT a UPDATE. Do prvního sloupce v tabulce, který má datový typ Timestamp se automaticky (pokud nedáme databázi jiné instrukce) uloží čas poslední operace.

Praktické příklady

Získání aktuálního času a data

 -- Získání aktuálního času a data
SELECT NOW();
-- Aktuální čas
SELECT CURTIME();
-- Aktuální datum
SELECT CURDATE();

Formátování data

Defaultní formát data v MySQL není příliš vhodný pro zobrazení. Někdo to řeší mim databázi, ale já osobně raději využívám shcopností databází. MySQL má pro formátování data funkci Date_Format. [1]

 -- Tento dotaz vrátí datum ve formátu dd.mm. YYYY
SELECT Date_Format(`Datum`,'%d.%m. %Y') AS `Datum`
FROM `tabulka`;
-- Aktuální datum a čas
SELECT Date_Format(NOW(), '%d.%m. %Y %H:%i');

Automatické odhlášení

V rámci zabezpečení je vhodné do sytému, kde se musí uživatelé logovat implementovat automatické odhlášení (po určité době nečinnosti). Nejčastěji se pro monitorování uživatele používá databáze. Pokud máme tabulku, ve které je uložen login uživatele a čas jeho poslední akce:

+------+---------------------+
|Login | Time                |
+------+---------------------+
|Franta| 2006-04-29 15:20:23 |
+------+---------------------+
|Pepa  | 2006-04-29 06:45:08 |
+------+---------------------+
|Milan | 2006-04-29 09:22:14 |
+------+---------------------+

Potřebujeme zjistit všechny uživatele, kteří po dobu jedné hodiny neprovedli žádnou akci.

SELECT `Login`
FROM `table`
WHERE `Time` < NOW() - INTERVAL 1 HOUR;
-- NEBO
SELECT `Login`
FROM `table`
WHERE `Time` < NOW() - INTERVAL 60 MINUTE;

-- A NEBO
SELECT `Login`
FROM `table`
WHERE `Time` < NOW() - INTERVAL '59:60' MINUTE_SECOND;

Tento zápis je funkční od verze 3.23. U starší verze musíme volat funkci Date_Add. [2]

Unixtimestamp

Unixtimestamp je číslo, které udává počet sekund od 1. ledna 1970. Tento formát času se často používá v PHP. Proto je dobré vědět, jak ho získat z MySQL.

Funkce Unix_Timestamp převede argument na unixtimestamp. Pokud ji zavoláme bez argumentu, tak nám vrátí aktuální čas. [3]

 -- Následující dva dotazy vrátí stejný výsledek
SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());

Převod opačným směrem provádí funkce From_Unixtime. [4]

Literatura

Napsat komentář