Eu preciso obter o número de dias contidos em algumas datas no MySQL.
Por exemplo:
- A data de check-in é
12-04-2010
- Data de check-out
15-04-2010
A diferença do dia seria 3
E a função DATEDIFF ?
Citando a página do manual:
DATEDIFF () retorna expr1 - expr2 expresso como um valor em dias de uma data para a outra. expr1 e expr2 são expressões de data ou data e hora. Somente as partes da data dos valores são usadas no cálculo
No seu caso, você usaria:
mysql> select datediff('2010-04-15', '2010-04-12');
+--------------------------------------+
| datediff('2010-04-15', '2010-04-12') |
+--------------------------------------+
| 3 |
+--------------------------------------+
1 row in set (0,00 sec)
Mas observe que as datas devem ser escritas como YYYY-MM-DD
e não DD-MM-YYYY
como você postou.
datediff()
método, caso contrário, ele retornará valor negativo.Observe que se você quiser contar 24 horas por dia, entre 2 datas, datediff pode retornar valores incorretos para você.
Como a documentação declara:
o que resulta em
select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')
retorna 1 em vez do esperado 0.
A solução está sendo usada
select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
(observe a ordem oposta dos argumentos em comparação com datediff).Alguns exemplos:
select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
retorna 0select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00');
retorna 1select timestampdiff(DAY, '2016-04-13 11:00:00', now());
retorna quantos dias completos de 24 horas se passaram desde 13-04-2016 11:00:00 até agora .Espero que ajude alguém, porque, a princípio, não é muito óbvio por que datatediff retorna valores que parecem inesperados ou errados.
fonte
datediff()
etimestampdiff()
.Use o
DATEDIFF()
funçãoExemplo da documentação:
fonte
Prefiro TIMESTAMPDIFF porque você pode facilmente mudar a unidade, se necessário.
fonte
Obter dias entre a data atual e a data de destino
resultado
dias
fonte
resultado::
espero que ajude alguém no futuro
fonte