Nebojte se formátu datumu a času v MySQL
Používáte-li MySQL databáze, můžete využít užitečné funkce SQL při práci s datumem a časem. Před tím byste ale měli dodržet formátování typické pro SQL.
Pro začátek připomenu, v jakém formátu pracujeme v MySQL s datumem a časem:
YEAR(M) – rozmezí ‚1901‘ až ‚2155‘ (pro čtyřmístný formát) nebo ’70‘ až ’69‘ (pro dvoumístný formát 1970-2069), jako argument můžeme použít 2 nebo 4 (bez argumentu 4); ve formátu rrrr nebo rr;
DATE – rozmezí ‚1000-01-01‘ až ‚9999-12-31‘; ve formátu rrrr-mm-dd
TIME – ‚-838:59:59‘ až ‚838:59:59‘; formát hh:mm:ss;
DATETIME – rozmezí ‚1000-01-01 00:00:00‘ až ‚9999-12-31 23:59:59‘; ve formátu rrrr-mm-dd hh:mm:ss;
TIMESTAMP (M) – rozmezí ‚1970-01-01 00:00:00‘ až ‚2037-xx-xx xx:xx:xx‘ bez oddělovacích znamének a mezer. Jako argument (M) můžeme zadat délku údaje, který chceme získat 14, 12, 8 nebo 6, formát (podle argumentu) rrrrmmddhhmmss, rrmmddhhmmss, rrrrmmdd nebo rrmmdd; pokud nezadáme argument, získáme 14místný zápis.
Pokud chceme zjistit časové údaje serveru použijeme tyto příkazy (přidáme-li k příkazům CURTIME()
, CURDATE()
, NOW()
a SYSDATE()
'+0', získáme údaj bez rozdělovacích znamének a mezer):
Čas
CURTIME()
CURRENT_TIME
|
+------------+ | CURTIME() | +------------+ | 14:05:52 | +------------+
nebo
|
+----------------+ | CURTIME() + 0 | +----------------+ | 140552 | +----------------+
Datum
CURDATE()
CURRENT_DATE
|
+------------+ | CURDATE() | +------------+ | 2002-04-07 | +------------+
nebo
|
+----------------+ | CURDATE() + 0 | +----------------+ | 20020407 | +----------------+
Datum a čas
NOW()
SYSDATE()
CURRENT_TIMESTAMP
|
+-----------------------+ | NOW() | +-----------------------+ | 2002-04-07 14:05:52 | +-----------------------+
nebo
|
+-----------------+ | NOW() + 0 | +-----------------+ | 20020407140552 | +-----------------+
Pokud chceme aktuální datum nebo čas vkládat do tabulek databáze uděláme to následujícím způsobem.
|
Prohledávání tabulek
Pro databáze je ale jednou z hlavních funkcí vyhledávání podle zadaných parametrů. Nyní si ukážeme jak vyhledávat pomocí časových údajů. K tomuto účelu si vytvoříme jednoduchou tabulku prodeje zboží, která bude obsahovat číslo operace, název zboží a datum prodeje. Jako datum použijeme maximální, 14místný formát TIMESTAMP
, který bude obsahovat rok, měsíc, den, hodiny, minuty a sekundy.
|
PRÁCE S DATUMEM
Den v týdnu
DAYOFWEEK(datum)
Výsledek nám vrátí číselnou hodnotu dne v týdnu. Týden začíná nedělí a končí sobotou (1= neděle, 2= pondělí,.......6=pátek, 7=sobota). Tento záznam odpovídá standardu ODBC.
|
WEEKDAY(datum)
Výsledek nám opět vrátí číselnou hodnotu dne v týdnu. Týden začíná v pondělí (0=pondělí, 1=úterý....5=sobota, 6=neděle).
|
DAYNAME(datum)
Výsledek vrátí anglický název dne v týdnu ('Monday', 'Tuesday'....'Saturday', 'Sunday').
|
Den v měsíci
DAYOFMONTH(datum)
Výsledek bude den v měsíci v rozmezí 1 až 31.
|
Den v roce
DAYOFYEAR(datum)
Výsledek bude číslo dne v roce v rozmezí 1 až 366.
|
Týden v roce
WEEK(datum)
Výsledek bude číslo týdne v měsíci v rozmezí 0 až 53. Týden začíná v neděli.
|
WEEK(datum,argument)
Výsledek bude číslo týdne v měsíci v rozmezí 0 až 53. Pokud je argument 0
, začíná týden v neděli. Pokud je argument 1
, začíná týden v pondělí.
|
Měsíc v roce
MONTH(datum)
Výsledek bude číslo měsíce v roce v rozmezí 1 až 12
|
MONTHNAME(datum)
Výsledek vrátí anglický název měsíce ('January', 'February' .....'November', 'December').
|
Čtvrtletí
QUARTER(datum)
Výsledek nám vrátí číslo čtvrtletí v roce v rozmezí 1 až 4.
|
Rok
YEAR(datum)
Výsledek vrátí rok v rozmezí 1000 až 9999.
|
Rok a týden
YEARWEEK(datum)
YEARWEEK(datum,argument)
Výsledek vrátí rok a týden v roce. Pro formát s argumentem platí to samé co pro příkaz WEEK()
.
|
PRÁCE S ČASEM
Hodiny
HOUR(datum)
Výsledek vrátí hodinu v rozmezí 0 až 23.
|
Minuty
MINUTE(datum)
Výsledek vrátí minutu v rozmezí 0 až 59.
|
Sekundy
SECOND(datum)
Výsledek vrátí sekundu v rozmezí 0 až 59.
|
Požadovaný výsledek většinou získáme kombinací více dotazů. Následující příklad ukazuje, jak zjistit zboží, které se prodávalo o prázdninách roku 2001 o víkendech odpoledne. Zboží bude seřazeno podle abecedy:
|
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Netcat a Ncat
8. prosince 2022 -
Nové AI modely od Open AI a Google
22. května 2024 -
Nepodceňte UX na vašem webu: Proč na něm záleží?
10. dubna 2024 -
Jak si vyzkoušet Apple Intelligence v EU
2. srpna 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024
Michal Kreuzman
Led 9, 2013 v 0:30Dovolim si nesouhlasit s nastavenim modu pro WEEK na 1. Tento mod nepracuje podle me v ceskych podminkach spravne, protoze bere tydny 0-53. Z toho dostanete pro datum 31.12.2012 ze se jedna o 53. tyden. Podle ceskeho kalendare se ale jedna o tyden 1. Proto je podle me spravny mod pro cesky kalendar mod cislo 3. Viz dokumentace.
Martin B.
Srp 11, 2013 v 12:06Děkuju.. už jsem hned použil
SELECT `tab1` . *
FROM `tab1` , `tab2`
WHERE `meta_key` = 'wp-last-login'
AND ( `meta_value` +604800
) < UNIX_TIMESTAMP( NOW( ) )
konkretne WordPress s pluginem last-login a vybírá co nebyl už týden přihlášen