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)