Categories
Banco de dados Tutoriais

Como decompor dados de data e hora, com o uso de funções de formatação, no MySQL

Como decompor dados de datas e horas com as funções do MySQL

Obter informações de data ou hora, armazenadas no banco de dados é fácil. Se você quiser obter apenas parte da informação, o MySQL dispõe das funções DATE_FORMAT() e TIME_FORMAT() — ambas flexíveis o suficiente para retornar a informação na medida e no formato desejado.
Embora você disponha de funções (até mais) avançadas para isto, em linguagens como PHP, Python, Perl etc. — usar as funções do MySQL pode trazer ganhos de desempenho significativos para todo o sistema.
O assunto formatação de dados de data e hora é abordado em vários outros artigos, neste site, cuja leitura poderá complementar este post.
As funções DATE_FORMAT() e TIME_FORMAT() usam especificadores, para retirar da string que contém a informação de data ou hora a formatação ou substring desejada.
Como sempre, a melhor forma de entender, é através de exemplos. Observe a declaração abaixo e seu resultado:

SELECT DataCadastroCliente AS "Informação original",
    -> DATE_FORMAT(DataCadastroCliente, '%Y') AS "Ano",
    -> DATE_FORMAT(DataCadastroCliente, '%M') AS "Mês",
    -> DATE_FORMAT(DataCadastroCliente, '%d') AS "Dia"
    -> FROM CadastroClientes LIMIT 1;
+-----------------------+------+--------+------+
| Informação original   | Ano  | Mês    | Dia  |
+-----------------------+------+--------+------+
| 2016-03-29 10:03:39   | 2016 | março  | 29   |
+-----------------------+------+--------+------+
1 row in set (0.00 sec)

Para ver os nomes dos meses no idioma português, você precisa ajustar a variável de ambiente ‘lc_time_names’. Leia Como configurar o MySQL para exibir datas em português, para saber como fazer isto.
No próximo exemplo, vamos usar ver alguns resultados possíveis para a função TIME_FORMAT() do MySQL:

SELECT DataCadastroCliente AS "Informação original",
    -> TIME_FORMAT(DataCadastroCliente, '%H') AS "Hora",
    -> TIME_FORMAT(DataCadastroCliente, '%i') AS "Minutos"
    -> FROM CadastroClientes LIMIT 1;
+-----------------------+------+---------+
| Informação original   | Hora | Minutos |
+-----------------------+------+---------+
| 2016-03-29 10:03:39   | 10   | 03      |
+-----------------------+------+---------+
1 row in set (0.00 sec)

As letras, dentro das declarações, acompanhadas de aspas simples e de um sinal ‘%’ são chamadas especificadores e sua função é especificar exatamente que parte da string, que contém data e hora, há de ser exibida e de que forma a informação deverá ser mostrada.

Você pode encontrar uma tabela completa de especificadores possíveis no MySQL, no texto Como formatar a exibição das datas e das horas no MySQL.
Já que o MySQL armazena suas datas em um formato diferente daquele que usamos no dia a dia, os especificadores podem ser usados para “humanizar” e aproximar mais a formatação para o seu cliente final, tal como no exemplo que segue:

SELECT CidadeCliente AS "Cidade de origem",
    -> TIME_FORMAT(DataCadastroCliente, '%H horas e %i minutos') AS "Momento da chegada"
    -> FROM CadastroClientes LIMIT 3;
+------------------+-----------------------+
| Cidade de origem | Momento da chegada    |
+------------------+-----------------------+
| Tarbes           | 10 horas e 03 minutos |
| Solingen         | 21 horas e 44 minutos |
| Pizzoferrato     | 11 horas e 58 minutos |
+------------------+-----------------------+
3 rows in set (0.00 sec)

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.