Quem já trabalhou com datas no MySQL sabe que o formato que elas são armazenadas é, algumas vezes, meio inconveniente de se trabalhar. É possível modificar esse formato utilizando de programação (PHP, por exemplo), mas é muito mais simples já trazer a data no formato certo, diretamente do banco.
O banco de dados retorna uma data no seguinte formato: 2010-03-18 00:55;23 ou talvez nesse: 2010-03-18 (sem as horas). Como podemos fazer para que ele já traga no formato desejado, por exemplo: 18/03/2010?
É bem simples. Na hora de fazer o SELECT, utilizamos a função DATE_FORMAT() do MySQL. Ela pega a data no formato original e manipula da forma que você quizer.
Exemplo 1:
SELECT *,date_format(`data`,'%d/%m/%Y') as `data_formatada` FROM `pessoas`
Nesse caso, ele pegou a data contida no campo data, converteu para formato DD/MM/YYYY e nomeou o campo com a data formatada para data_formatada.
Exemplo 2:
SELECT *,date_format(`data`,'%d-%m às %Hh%i') as `data_formatada` FROM `pessoas`
No segundo exemplo o formato mudou para DD-MM às HHhMM, Exemplo: 25/06 às 14h35.
Cada ítem da data tem um identificador, veja abaixo a lista deles:
ID Descrição %a Nome da Semana Abreviado (Seg a Dom) %b Nome do mês Abreviado (Jan a Dez) %c Mês de forma numérica (1 a 12) %D Dia do mês com o sufixo Inglês (1st, 2nd, 3rd, …) %d Dia do Mês de forma numérica (01 a 31) %e Dia do Mês de forma numérica (1 a 31) %f Micro segundos (000000..999999) %H Horas (00 a 23) %h Horas (01 a 12) %I Horas (01 a 12) %i Minutos de forma numérica (00 a 59) %j Dia do Ano (001 a 366) %k Horas (0 a 23) %l Horas (1 a 12) %M Nome do mês (Janeiro a Dezembro) %m Mês de forma numérica (01 a 12) %p AM ou PM %r Horas, 12-horas (hh:mm:ss seguidos de AM ou PM) %S Segundos (00 a 59) %s Segundos (00 a 59) %T Horas, 24-horas (hh:mm:ss) %U Semana (00 a 53), onde Domingo é o primeiro dia da semana %u Semana (00 a 53), onde Segunda é o primeiro dia da semana %V Semana (00 a 53), onde Domingo é o primeiro dia da semana; usado com %X %v Semana (00 a 53), onde Segunda é o primeiro dia da semana; usado com %x %W Nome do dia da semana (Segunda a Domingo) %w Dia da semana (0=Domingo a 6=Sábado) %X Dia da semana onde Domingo é o primeiro dia da semana, de forma numérica com 4 dígitos, usado com %V %x Ano da semana, onde Segunda é o primeiro dia da semana, de forma numérica, com 4 dígitos, usado com %v %Y Ano numérico com 4 dígitos %y Ano numérico com 2 dígitos %% Um simples caracter “%” %x x, para qualquer “x” não listado acima
janeiro 8th, 2011 on 22:26
Parabéns pelas dicas, ficou muitíssimo bem explicado e deu pra eu colocar no meu código certinho.
Em outros forums/sites deu quiprocó.
Valeu
outubro 8th, 2012 on 22:57
Bah, queria te agradecer… essa dica foi muito legal! Estava há um bom tempo pesquisando uma forma de fazer exatamente o que colocastes aqui. Valeu!
outubro 30th, 2014 on 08:58
Muito Obrigada!
janeiro 1st, 2015 on 11:32
Conteúdo antigo disponível, isso ajuda muito…
Migrei agora do firebird para mysql… Valew Tiago
abril 28th, 2016 on 14:10
Olá!
Parabéns pelo blog e pelo artigo!
Estou com uma dúvida e queria ver com você se consegue me ajudar, por favor.
Tenho um campo na minha tabela no MySQL que é do tipo varchar e armazena uma data, no formato: 2016-04-27T21:42:34-03:00
Preciso fazer um select filtrando os últimos 3 dias desse campo de data, mas não estou conseguindo fazer o filtro convertendo de varchar pra date.
Poderia me ajudar, por favor?
Obrigado!
outubro 5th, 2016 on 22:54
Muito obrigado.
Me ajudou mesmo.
fevereiro 27th, 2019 on 13:28
Estou tentando isso:
SELECT *,date_format(`ctb02_datascalendarioromano`,'%d de %M') as `data_formatada`
FROM tb02_calendarioromano;
Resultado: 27 de February
Não tem com ficar: 27 de fevereiro
Obrigado
fevereiro 27th, 2019 on 16:32
Parabéns pelo blog.
Por favor, estou há dias tentando formatar uma data de forma que o resultado seja o dia e o mês. Exemplo: 27 de fevereiro.
Considerando que também penso igual a sua coloxação("… mas é muito mais simples já trazer a data no formato certo, diretamente do banco.")
Uso phpMyAdmim e dendo da aba SQL digitei:
O resultado é:
data_formatada
01 de January
Esperava 01 de Janeiro
Tomei como base:
%d Dia do Mês de forma numérica (01 a 31)
e
%M Nome do mês (Janeiro a Dezembro)
Já tentei usar:
Até abre a coluna conforme desejo, mas editando desapare a query. Entendo que náo deve ser dessa forma.
dezembro 11th, 2019 on 17:20
Coloca o M do parametro minusculo %m