No MySQL, o
DATE_FORMAT()
função permite formatar a data e a hora. Aqui está um exemplo:
SELECT DATE_FORMAT('2018-12-01', '%W, %d %M %Y');
Resultado:
Saturday, 01 December 2018
Neste exemplo,
%W
é para o nome do dia da semana, %d
é para o dia do mês, %M
é para Mês e %Y
é para o ano. Há muitos outros especificadores de formato disponíveis que permitem especificar um formato preciso para datas, bem como o componente de hora. Formatando o componente de tempo
Aqui está um exemplo de formatação do componente de tempo:
SELECT DATE_FORMAT('2018-12-01 11:03:15', '%H:%i:%s %p');
Resultado:
11:03:15 AM
Neste exemplo,
%p
é usado para exibir AM ou PM, conforme o caso. É claro que você pode combiná-los para formatar a data e a hora de uma só vez:
SELECT DATE_FORMAT('2018-12-01 11:03:15', '%H:%i:%s %p, %W, %d %M %Y');
Resultado:
11:03:15 AM, Saturday, 01 December 2018
Formatação com uma função de data/hora
Muitas vezes você vai querer usar
DATE_FORMAT()
juntamente com outra função de data/hora. Por exemplo, você pode usá-lo junto com CURDATE()
para retornar a data atual, bem formatada:SELECT CURDATE() AS Unformatted, DATE_FORMAT(CURDATE(), '%W, %M %d, %Y') AS Formatted;
Resultado:
+-------------+----------------------+ | Unformatted | Formatted | +-------------+----------------------+ | 2018-05-04 | Friday, May 04, 2018 | +-------------+----------------------+
Você também pode fazer isso com o
NOW()
função se você precisar de tempo:SELECT NOW() AS Unformatted, DATE_FORMAT(NOW(), '%r') AS Formatted;
Resultados:
+---------------------+-------------+ | Unformatted | Formatted | +---------------------+-------------+ | 2018-05-04 14:33:52 | 02:33:52 PM | +---------------------+-------------+
A função TIME_FORMAT()
O MySQL também tem um
TIME_FORMAT()
função que pode ser usada para formatar a hora. Esta função funciona de forma semelhante a DATE_FORMAT()
exceto que TIME_FORMAT()
aceita especificadores de formato apenas para horas, minutos, segundos e microssegundos. Exemplo:
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';
Resultados:
+------+--------+---------+----------+ | Hour | Minute | Seconds | AM or PM | +------+--------+---------+----------+ | 07 | 35 | 10 | AM | +------+--------+---------+----------+
A função STR_TO_DATE()
O
STR_TO_DATE()
função é o inverso do DATE_FORMAT()
função. Ele permite que você forneça uma string a ser formatada como uma data. Aceita dois parâmetros; a string e o formato. Aqui está um exemplo:
SELECT STR_TO_DATE('Saturday, 6 December 2018', '%W, %d %M %Y') AS Date;
Resultado:
+------------+ | Date | +------------+ | 2018-12-06 | +------------+
Como encontrar o formato de data correto
MySQL tem uma pequena função útil chamada
GET_FORMAT()
. Esta função ajuda você a encontrar o formato correto para usar ao usar o DATE_FORMAT()
função e/ou STR_TO_DATE()
função. Veja como funciona:
SELECT GET_FORMAT(DATE, 'USA');
Isso resulta no seguinte:
%m.%d.%Y
Que nos diz a string de formato que precisaríamos usar ao formatar uma data com o
DATE_FORMAT()
função. Por exemplo, poderíamos pegar os resultados desse exemplo e aplicá-los ao DATE_FORMAT()
função:SELECT DATE_FORMAT(NOW(), '%m.%d.%Y');
E teríamos o resultado desejado:
05.04.2018
Você também pode passar
GET_FORMAT()
diretamente para DATE_FORMAT()
se você preferir. SELECT DATE_FORMAT(NOW(), GET_FORMAT(DATE, 'USA'));
Resultado:
05.04.2018
De qualquer forma, abaixo estão exemplos com várias opções.
Data
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;
Resultado:
+----------+----------+----------+----------+----------+ | USA | JIS | ISO | EUR | INTERNAL | +----------+----------+----------+----------+----------+ | %m.%d.%Y | %Y-%m-%d | %Y-%m-%d | %d.%m.%Y | %Y%m%d | +----------+----------+----------+----------+----------+
Data e hora
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;
Resultado:
+-------------------+-------------------+-------------------+-------------------+--------------+ | 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 | +-------------------+-------------------+-------------------+-------------------+--------------+
Hora
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;
Resultado:
+-------------+----------+----------+----------+----------+ | USA | JIS | ISO | EUR | INTERNAL | +-------------+----------+----------+----------+----------+ | %h:%i:%s %p | %H:%i:%s | %H:%i:%s | %H.%i.%s | %H%i%s | +-------------+----------+----------+----------+----------+