Respuestas:
¿Qué pasa con la función DATEDIFF ?
Citando la página del manual:
DATEDIFF () devuelve expr1 - expr2 expresado como un valor en días desde una fecha a la otra. expr1 y expr2 son expresiones de fecha o fecha y hora. Solo las partes de fecha de los valores se usan en el cálculo
En su caso, usaría:
mysql> select datediff('2010-04-15', '2010-04-12');
+--------------------------------------+
| datediff('2010-04-15', '2010-04-12') |
+--------------------------------------+
| 3 |
+--------------------------------------+
1 row in set (0,00 sec)
Pero tenga en cuenta que las fechas deben escribirse como YYYY-MM-DD
, y no DD-MM-YYYY
como usted publicó.
datediff()
método; de lo contrario, devolverá un valor negativo.
Tenga en cuenta que si desea contar FULL 24h días entre 2 fechas, dateiff puede devolverle valores incorrectos.
Como dice la documentación:
Solo las partes de fecha de los valores se utilizan en el cálculo.
lo que resulta en
select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')
devuelve 1 en lugar del esperado 0.
La solución está usando select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
(tenga en cuenta el orden opuesto de los argumentos en comparación con dateiff).
Algunos ejemplos:
select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
devuelve 0select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00');
devuelve 1select timestampdiff(DAY, '2016-04-13 11:00:00', now());
devuelve cuántos días completos de 24h han pasado desde 2016-04-13 11:00:00 hasta ahora .Espero que ayude a alguien, porque al principio no es muy obvio por qué dateiff devuelve valores que parecen ser inesperados o incorrectos.
datediff()
y timestampdiff()
.
Usa la DATEDIFF()
función.
Ejemplo de documentación:
SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
-> 1
Prefiero TIMESTAMPDIFF porque puedes cambiar fácilmente la unidad si es necesario.
Obtener días entre la fecha actual y la fecha de destino
SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;
salida
335
SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM membership_dates md
salida::
id entity_id start_date end_date days
1 1236 2018-01-16 00:00:00 2018-08-31 00:00:00 227
2 2876 2015-06-26 00:00:00 2019-06-30 00:00:00 1465
3 3880 1990-06-05 00:00:00 2018-07-04 00:00:00 10256
4 3882 1993-07-05 00:00:00 2018-07-04 00:00:00 9130
espero que ayude a alguien en el futuro