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