V MySQL, DATE_FORMAT()
Funkce umožňuje formátovat datum a čas.
Zde je příklad:
SELECT DATE_FORMAT('2018-12-01', '%W, %d %M %Y');
Výsledek:
Saturday, 01 December 2018
V tomto příkladu %W
je pro název dne v týdnu %d
je pro den v měsíci, %M
je pro měsíc a %Y
je pro rok. K dispozici je mnoho dalších specifikátorů formátu, které vám umožňují určit přesný formát pro data a také časovou složku.
Formátování časové složky
Zde je příklad formátování časové složky:
SELECT DATE_FORMAT('2018-12-01 11:03:15', '%H:%i:%s %p');
Výsledek:
11:03:15 AM
V tomto příkladu %p
se používá k zobrazení AM nebo PM, podle toho, o jaký případ jde.
Samozřejmě je můžete zkombinovat a naformátovat tak datum i čas najednou:
SELECT DATE_FORMAT('2018-12-01 11:03:15', '%H:%i:%s %p, %W, %d %M %Y');
Výsledek:
11:03:15 AM, Saturday, 01 December 2018
Formátování pomocí funkce data/času
Často budete chtít použít DATE_FORMAT()
spolu s další funkcí data/času. Můžete jej například použít spolu s CURDATE()
vrátit aktuální datum v pěkném formátu:
SELECT CURDATE() AS Unformatted, DATE_FORMAT(CURDATE(), '%W, %M %d, %Y') AS Formatted;
Výsledek:
+-------------+----------------------+ | Unformatted | Formatted | +-------------+----------------------+ | 2018-05-04 | Friday, May 04, 2018 | +-------------+----------------------+
Můžete to také provést pomocí NOW()
funkce, pokud potřebujete čas:
SELECT NOW() AS Unformatted, DATE_FORMAT(NOW(), '%r') AS Formatted;
Výsledky:
+---------------------+-------------+ | Unformatted | Formatted | +---------------------+-------------+ | 2018-05-04 14:33:52 | 02:33:52 PM | +---------------------+-------------+
Funkce TIME_FORMAT()
MySQL má také TIME_FORMAT()
funkce, kterou lze použít k formátování času. Tato funkce funguje podobně jako DATE_FORMAT()
kromě toho TIME_FORMAT()
přijímá pouze specifikátory formátu pouze pro hodiny, minuty, sekundy a mikrosekundy.
Příklad:
SET @time = '07:35:10'; SELECT TIME_FORMAT(@time, '%H') AS Hour, TIME_FORMAT(@time, '%i') AS Minute, TIME_FORMAT(@time, '%s') As Seconds, TIME_FORMAT(@time, '%p') AS 'AM or PM';
Výsledky:
+------+--------+---------+----------+ | Hour | Minute | Seconds | AM or PM | +------+--------+---------+----------+ | 07 | 35 | 10 | AM | +------+--------+---------+----------+
Funkce STR_TO_DATE()
STR_TO_DATE()
funkce je inverzní k DATE_FORMAT()
funkce. Umožňuje vám zadat řetězec, který bude formátován jako datum. Přijímá dva parametry; řetězec a formát.
Zde je příklad:
SELECT STR_TO_DATE('Saturday, 6 December 2018', '%W, %d %M %Y') AS Date;
Výsledek:
+------------+ | Date | +------------+ | 2018-12-06 | +------------+
Jak najít správný formát data
MySQL má šikovnou malou funkci nazvanou GET_FORMAT()
. Tato funkce vám pomůže najít správný formát pro použití při použití DATE_FORMAT()
funkce a/nebo STR_TO_DATE()
funkce .
Funguje to takto:
SELECT GET_FORMAT(DATE, 'USA');
Výsledkem je následující:
%m.%d.%Y
Což nám říká formátovací řetězec, který bychom měli použít při formátování data pomocí DATE_FORMAT()
funkce. Mohli bychom například vzít výsledky z tohoto příkladu a aplikovat je na DATE_FORMAT()
funkce:
SELECT DATE_FORMAT(NOW(), '%m.%d.%Y');
A skončili bychom s požadovaným výsledkem:
05.04.2018
Můžete také předat GET_FORMAT()
přímo na DATE_FORMAT()
chcete-li.
SELECT DATE_FORMAT(NOW(), GET_FORMAT(DATE, 'USA'));
Výsledek:
05.04.2018
V každém případě jsou níže uvedeny příklady s různými možnostmi.
Datum
SELECT GET_FORMAT(DATE, 'USA') AS USA, GET_FORMAT(DATE, 'JIS') AS JIS, GET_FORMAT(DATE, 'ISO') AS ISO, GET_FORMAT(DATE, 'EUR') AS EUR, GET_FORMAT(DATE, 'INTERNAL') AS INTERNAL;
Výsledek:
+----------+----------+----------+----------+----------+ | USA | JIS | ISO | EUR | INTERNAL | +----------+----------+----------+----------+----------+ | %m.%d.%Y | %Y-%m-%d | %Y-%m-%d | %d.%m.%Y | %Y%m%d | +----------+----------+----------+----------+----------+
Datum a čas
SELECT GET_FORMAT(DATETIME, 'USA') AS USA, GET_FORMAT(DATETIME, 'JIS') AS JIS, GET_FORMAT(DATETIME, 'ISO') AS ISO, GET_FORMAT(DATETIME, 'EUR') AS EUR, GET_FORMAT(DATETIME, 'INTERNAL') AS INTERNAL;
Výsledek:
+-------------------+-------------------+-------------------+-------------------+--------------+ | USA | JIS | ISO | EUR | INTERNAL | +-------------------+-------------------+-------------------+-------------------+--------------+ | %Y-%m-%d %H.%i.%s | %Y-%m-%d %H:%i:%s | %Y-%m-%d %H:%i:%s | %Y-%m-%d %H.%i.%s | %Y%m%d%H%i%s | +-------------------+-------------------+-------------------+-------------------+--------------+
Čas
SELECT GET_FORMAT(TIME, 'USA') AS USA, GET_FORMAT(TIME, 'JIS') AS JIS, GET_FORMAT(TIME, 'ISO') AS ISO, GET_FORMAT(TIME, 'EUR') AS EUR, GET_FORMAT(TIME, 'INTERNAL') AS INTERNAL;
Výsledek:
+-------------+----------+----------+----------+----------+ | USA | JIS | ISO | EUR | INTERNAL | +-------------+----------+----------+----------+----------+ | %h:%i:%s %p | %H:%i:%s | %H:%i:%s | %H.%i.%s | %H%i%s | +-------------+----------+----------+----------+----------+