Réponses:
Qu'en est-il de la fonction DATEDIFF ?
Citant la page du manuel:
DATEDIFF () renvoie expr1 - expr2 exprimée sous forme de valeur en jours d'une date à l'autre. expr1 et expr2 sont des expressions de date ou de date et d'heure. Seules les parties de date des valeurs sont utilisées dans le calcul
Dans votre cas, vous utiliseriez:
mysql> select datediff('2010-04-15', '2010-04-12');
+--------------------------------------+
| datediff('2010-04-15', '2010-04-12') |
+--------------------------------------+
| 3 |
+--------------------------------------+
1 row in set (0,00 sec)
Mais notez que les dates doivent être écrites comme YYYY-MM-DDet non DD-MM-YYYYcomme vous l'avez publié.
datediff()méthode, sinon il renverra une valeur négative.
Notez que si vous voulez compter PLEIN 24 jours entre 2 dates, dateiff peut renvoyer des valeurs erronées pour vous.
Comme l'indique la documentation:
Seules les parties de date des valeurs sont utilisées dans le calcul.
ce qui se traduit par
select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')
renvoie 1 au lieu de 0 attendu.
La solution utilise select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
(notez l'ordre opposé des arguments par rapport à daté).
Quelques exemples:
select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
renvoie 0select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00');
renvoie 1select timestampdiff(DAY, '2016-04-13 11:00:00', now()); renvoie le nombre de jours complets de 24h écoulés depuis le 13/04/2016 11:00:00 jusqu'à présent .J'espère que cela aidera quelqu'un, car au début, il n'est pas très évident de savoir pourquoi Datatiff renvoie des valeurs qui semblent inattendues ou erronées.
datediff()et timestampdiff().
Utilisez la DATEDIFF()fonction.
Exemple tiré de la documentation:
SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
-> 1
Je préfère TIMESTAMPDIFF car vous pouvez facilement changer l'unité si besoin est.
Obtenir les jours entre la date actuelle et la date de destination
SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;
production
335
SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM membership_dates md
production::
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
j'espère que cela aidera quelqu'un à l'avenir