ELEKTRO
CHEMIE
PROGRAMOVÁNÍ
FOTKY
BLOG
E-SHOP

Elektro

  • Novinky
  • Aktuality
  • PHP
  • MySQL
  • JavaScript
  • .NET
  • Download
  • Odkazy
  • Anketa
  • Návštěvní kniha
  • Mapa webu
  • O webu
  • RSS

  • © by Hugo moravec.zd@gmail.com

    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]

    To je pro dnešek vše. Třeba to ještě časem rozšířím.

    Literatura