Comment obtenir le nombre de jours de différence entre deux dates sur mysql?


162

J'ai besoin d'obtenir le nombre de jours contenus dans quelques dates sur MySQL.

Par exemple:

  • La date d'arrivée est 12-04-2010
  • Date de départ 15-04-2010

La différence de jour serait de 3

Réponses:


262

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é.


ouais j'ai oublié le format de la date quand j'ai posé la question; p merci
Audel

4
PS AAAA-MM-JJ est la norme ISO 8601, donc tout le monde devrait l'utiliser. Très pratique.
Ernestas Stankevičius

4
Remarque : le premier argument doit être supérieur au deuxième argument de la datediff()méthode, sinon il renverra une valeur négative.
Shashanth

38

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 0
  • select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00'); renvoie 1
  • select 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.


bizarre que les arguments soient inversés entre datediff()et timestampdiff().
billynoah

17

Utilisez la DATEDIFF()fonction.

Exemple tiré de la documentation:

SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
    -> 1


5

Obtenir les jours entre la date actuelle et la date de destination

 SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;

production

journées

 335

2
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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.