Como formatar a exibição de datas e horas no MySQL. – Elias Praciano
Categories
Banco de dados Tutoriais

Como formatar a exibição de datas e horas no MySQL.

Como formatar e personalizar a exibição de dados de data e hora no MySQL. Entenda o funcionamento das funções DATE_FORMAT e TIME_FORMAT.

Você pode exibir as datas armazenadas no MySQL de inúmeras formas, limitadas apenas pela sua imaginação. Tanto é possível usar um formato padrão, como 1997-19-01 (CCYY-MM-DD), quanto um formato mais “literário”, como “dezenove de Janeiro de mil novecentos e noventa e nove”.
Para obter o efeito desejado, você pode usar funções do próprio MySQL ou de alguma linguagem de programação, usada para aceder ao banco de dados.
Como já foi dito, no artigo Formatos de data e hora no MySQL, o banco de dados segue o padrão ISO 8601 para armazenar os valores referentes a datas. Você não pode mudar isto.
Mas é fácil pegar esta informação e exibi-la da maneira que você achar melhor.
Para realizar a tarefa, use as funções do MySQL DATE_FORMAT() ou TIME_FORMAT().

Como usar as funções de formatação de data e hora no MySQL

Como explicado no artigo Formatos de data e hora no MySQL, ele usa o padrão ISO para armazenar este tipo de dados e não é possível alterar isto.
A função DATE_FORMAT() usa 2 argumentos, dentre os valores DATE, DATETIME ou TIMESTAMP e uma string descrevendo como o resultado deverá ser exibido.
Dentro da string de formatação, use sequencias especiais para especificar qual parte da data deverá ser exibida:

Especificador Descrição
%a Nome do dia da semana abreviado (Sun, Mon, Tue etc.) — você provavelmente já viu esta forma abreviada (em inglês) no seu relógio de pulso
%b Nome do mês abreviado (Jan, Feb, Mar etc.)
%c Número do mês
%D Dia do mês, com o sufixo indicador de numeral ordinal, em inglês (0th, 1st, 2nd, 3rd etc.)
%d Dia do mês, em numerais cardinais (00 a 31)
%e Dia do mês, numérico, sem a necessidade de acrescentar um zero para formar 2 dígitos (0, 1, 2 … 31)
%f Microssegundos (000000 … 999999)
%H Hora no formato 24h (00 … 23)
%h Hora (01 … 12)
%I Hora (1 …12)
%i Minutos em formato numérico (00 … 59)
%j Dia do ano (001 … 366)
%k Hora do dia (0 … 23)
%l Hora do dia (1 … 12)
%M Nome do mês (January, February etc.)
%m Mês em formato numérico (00 … 12)
%p AM ou PM
%r Hora do dia em formato 12h (hh:mm:ss) seguido de AM ou PM, para indicar se é antes ou depois de meio dia)
%S Segundos (00 … 59)
%s Segundos (00 … 59)
%T Hora do dia, em formato 24h (hh:mm:ss)
%U Semana do ano (00 … 53), em que Sunday (Domingo) é o primeiro dia da semana; WEEK() mode 0
%u Semana do ano (00 … 53), em que Monday (Segunda-feira) é o primeiro dia da semana; WEEK() mode 1
%V Semana do ano (01 … 53), onde Sunday é o primeiro dia da semana; WEEK() mode 2; usado com %X
%v Semana do ano (01 … 53), onde Monday é o primeiro dia da semana; WEEK() mode 3; usado com %x
%W Nome do dia da semana (SundaySaturday)
%w Número do dia da semana (0=Domingo, 1=Segunda-feira etc.)
%X Ano para a semana em que Domingo é o primeiro dia. Valor numérico, quatro dígitos; usado com %V
%x Ano para a semana em que a Segunda é o primeiro dia. Valor numérico, quatro dígitos; usado com %v
%Y Ano em formato numérico, com 4 dígitos
%y Ano em formato numérico, com 2 dígitos
%% Um caractere “%” literal

A faixa de valores dos especificadores para meses e dias começam em zero por que o MySQL permite o armazenamento de datas incompletas, tal como ‘2016-00-00’.

O idioma usado para nomes de dias, meses e abreviações é controlado pelo valor da variável de sistema lc_time_names.

Leia o artigo Como alterar o idioma de exibição dos nomes de meses e dias da semana no MySQL, para saber como ver o valor atual de lc_time_names e como alterá-lo.
Veja um exemplo do funcionamento da função DATE_FORMAT:

SELECT DATE_FORMAT('2021-08-06','%W %a %M %b');
_

Bom saber que meu aniversário cai numa sexta-feira, no ano 2021 😉

+-----------------------------------------+
| DATE_FORMAT('2021-08-06','%W %a %M %b') |
+-----------------------------------------+
| Friday Fri August Aug                   |
+-----------------------------------------+
1 row in set (0.00 sec)

Aproveite para verificar em que dia da semana o seu aniversário irá cair, no ano que vem.
Se você tem uma tabela, com campos de datas, pode obter sua visualização em formatos diferentes e, talvez, mais atraentes. Adapte o exemplo, que segue, ao seu caso:

SELECT
     -> NomeCliente,
     -> DataNascimentoCliente,
     -> DATE_FORMAT(DataNascimentoCliente, '%M %d, %Y')
     -> from CadastroClientes
     -> LIMIT 5;
+------------------+-----------------------+-------------------------------------------------+
| NomeCliente      | DataNascimentoCliente | DATE_FORMAT(DataNascimentoCliente, '%M %d, %Y') |
+------------------+-----------------------+-------------------------------------------------+
| Christen Wiggins | 1984-04-11 19:32:05   | April 11, 1984                                  |
| Justine Howard   | 1984-12-22 02:53:07   | December 22, 1984                               |
| Brenda Ellis     | 1981-05-14 03:12:50   | May 14, 1981                                    |
| Hayfa Mendoza    | 1983-10-01 22:40:44   | October 01, 1983                                |
| Kylie Mckay      | 1969-12-16 11:01:39   | December 16, 1969                               |
+------------------+-----------------------+-------------------------------------------------+
5 rows in set (0.00 sec)

Use a cláusula AS, para melhorar a aparência da saída dos dados:

SELECT
     -> NomeCliente AS 'Cliente',
     -> DATE_FORMAT(DataNascimentoCliente, 'dia %d de %M de %Y') AS 'Data de nascimento'
     -> from CadastroClientes
     -> LIMIT 5;
+------------------+----------------------------+
| Cliente          | Data de nascimento         |
+------------------+----------------------------+
| Christen Wiggins | dia 11 de abril de 1984    |
| Justine Howard   | dia 22 de dezembro de 1984 |
| Brenda Ellis     | dia 14 de maio de 1981     |
| Hayfa Mendoza    | dia 01 de outubro de 1983  |
| Kylie Mckay      | dia 16 de dezembro de 1969 |
+------------------+----------------------------+
5 rows in set (0.00 sec)

Como usar a função TIME_FORMAT()

Por fim, a função TIME_FORMAT() tem a mesma sintaxe de DATE_FORMAT(), só que ela se refere à parte do horário, especificamente.
Veja um exemplo de uso:

SELECT NomeCliente,
     -> DataCadastroCliente,
     -> TIME_FORMAT(DataCadastroCliente, '%r') AS 'Formato 12h',
     -> TIME_FORMAT(DataCadastroCliente, '%T') AS 'Formato 24h'
     -> FROM CadastroClientes
     -> LIMIT 50,2\G;
*************************** 1. row ***************************
        NomeCliente: Rhoda Pearson
DataCadastroCliente: 2012-11-25 17:58:58
        Formato 12h: 05:58:58 PM
        Formato 24h: 17:58:58
*************************** 2. row ***************************
        NomeCliente: Glenna Jarvis
DataCadastroCliente: 2016-06-30 07:42:35
        Formato 12h: 07:42:35 AM
        Formato 24h: 07:42:35
2 rows in set (0.00 sec)

Use a tabela de especificadores (acima) para personalizar sempre os resultados das suas consultas MySQL, quando envolverem datas e horários.

By Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como "Rick and Morty" e "BoJack Horseman".
Me siga no Twitter e vamos trocar ideias!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.