Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como formatar a data e hora no MySQL


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   |
+-------------+----------+----------+----------+----------+