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

Audel
la source

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

Pascal MARTIN
la source
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.

Konrad Gałęzowski
la source
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
Tobias Cohen
la source
6

Je préfère TIMESTAMPDIFF car vous pouvez facilement changer l'unité si besoin est.

theblang
la source
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
vijayabalan
la source
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

Développeur
la source