MySQL - Cálculo de período de tempo entre duas datas com TIMESTAMPDIFF
Muitas vezes precisamos saber quantos dias se passaram desde que um dado registro entrou no banco de dados ou outros cálculos com datas e horas que precisemos agrupar em dias, meses, horas e etc.
Este tipo de informação geralmente é útil nos processos de limpeza e backup de dados mas também em outras situações como a exibição de dados para um usuário.
Geralmente este procedimento é delegado ao software que lê o banco de dados e realiza as operações necessárias, seja para backup, limpeza ou exibição de dados.
Porém o MySQL possui uma função interessante para efetuar este tipo de procedimento diretamente na query do banco de dados, o que é mais natural já que se trata de um dado.
A função TIMESTAMPDIFF() do MySQL calcula o tempo decorrido entre duas datas que pode ser em dias, meses, minutos e etc.
A lista completa segue abaixo:
FRAC_SECOND (microsegundos),
SECOND (segundos),
MINUTE (minuto),
HOUR (hora),
DAY (dia),
WEEK (semana),
MONTH (mês),
QUARTER (trimestre),
YEAR (ano)
Vamos calcular, por exemplo, quantos dias se passaram desde o registro de alguns dados no banco de dados, baseando-se no momento em que a consulta é feita (ou seja, utilizando a função NOW() como a segunda data ou data de referência):
Tabela padrão - cadastro:
 id | nome   | data  
 1  | Marta  | 2015-03-05 17:05:56  
 2  | Verena | 2015-03-04 17:05:56  
 3  | Pedro  | 2015-03-03 17:07:18  
 SELECT  
      *,  
      TIMESTAMPDIFF(DAY,data,NOW()) AS postado_dias  
 FROM  
      cadastro  
Temos como resposta a tabela abaixo
 id | nome   | data                | postado_dias  
 1  | Marta  | 2015-03-05 17:05:56 | 0  
 2  | Verena | 2015-03-04 17:05:56 | 1  
 3  | Pedro  | 2015-03-03 17:07:18 | 2  
Podemos também utilizar uma data qualquer
 SELECT  
      *,  
      TIMESTAMPDIFF(DAY,data,'2016-03-03 17:07:17') AS postado_dias  
 FROM  
      cadastro  
Temos como resposta a tabela abaixo
 id | nome   | data                 | postado_dias  
 1  | Marta  | 2015-03-05 17:05:56  | 364  
 2  | Verena | 2015-03-04 17:05:56  | 365  
 3  | Pedro  | 2015-03-03 17:07:18  | 365  
Ou mesmo mudar a base de cálculo de dias para meses
 SELECT  
      *,  
      TIMESTAMPDIFF(MONTH,data,'2016-03-03 17:07:18') AS postado_meses  
 FROM  
      cadastro  
Temos como resposta a tabela abaixo
 id | nome   | data                | postado_meses  
 1  | Marta  | 2015-03-05 17:05:56 | 11  
 2  | Verena | 2015-03-04 17:05:56 | 11  
 3  | Pedro  | 2015-03-03 17:07:18 | 12  
Espero que seja útil!
Abraço!

 
 
Comentários
Postar um comentário