Existe uma maneira de fazer uma consulta no MySQL que me dê a diferença entre dois carimbos de data / hora em segundos ou eu precisaria fazer isso em PHP? E se sim, como eu faria para fazer isso?
Existe uma maneira de fazer uma consulta no MySQL que me dê a diferença entre dois carimbos de data / hora em segundos ou eu precisaria fazer isso em PHP? E se sim, como eu faria para fazer isso?
Respostas:
Você pode usar TIMEDIFF()
as TIME_TO_SEC()
funções e da seguinte maneira:
SELECT TIME_TO_SEC(TIMEDIFF('2010-08-20 12:01:00', '2010-08-20 12:00:00')) diff;
+------+
| diff |
+------+
| 60 |
+------+
1 row in set (0.00 sec)
Você também pode usar a UNIX_TIMESTAMP()
função como @Amber sugerido em outra resposta:
SELECT UNIX_TIMESTAMP('2010-08-20 12:01:00') -
UNIX_TIMESTAMP('2010-08-20 12:00:00') diff;
+------+
| diff |
+------+
| 60 |
+------+
1 row in set (0.00 sec)
Se você estiver usando o TIMESTAMP
tipo de dados, acho que a UNIX_TIMESTAMP()
solução seria um pouco mais rápida, pois os TIMESTAMP
valores já estão armazenados como um inteiro representando o número de segundos desde a época ( Fonte ). Citando os documentos :
Quando
UNIX_TIMESTAMP()
é usado em umTIMESTAMP
coluna, a função retorna o valor do carimbo de data / hora interno diretamente, sem conversão implícita de “string para carimbo de data / hora Unix”.Lembre-se de que o
TIMEDIFF()
tipo de dado de retorno deTIME
.TIME
os valores podem variar de '-838: 59: 59' a '838: 59: 59' (aproximadamente 34,96 dias)
Que tal "TIMESTAMPDIFF":
SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff
str_to_date(date_column, '%m/%d/%Y')
dentro da função TIMESTAMPDIFF para a coluna que precisa de sua formatação corrigida.
TIME_TO_SEC
atinge o máximo em 3020399
enquanto isso retorna o valor correto.
Observe que a TIMEDIFF()
solução só funciona quando datetimes
há menos de 35 dias de intervalo!
TIMEDIFF()
retorna um TIME
tipo de dados e o valor máximo para TIME é 838: 59: 59 horas (= 34,96 dias)
unit
parâmetro comoSECOND
.