web-dev-qa-db-fra.com

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

Je dois connaître le nombre de jours contenus dans quelques dates sur MySQL.

Par exemple:

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

La différence de jour serait de 3

150
Audel

Qu'en est-il de la fonction DATIFF?

Citant la page du manuel:

DATEDIFF () renvoie expr1 - expr2 sous forme de valeur en jours d'une date à l'autre. expr1 et expr2 sont des expressions de date ou de date et 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-DD, et non pas DD-MM-YYYY comme vous avez posté.

234
Pascal MARTIN

Notez que si vous voulez compter PLEIN 24h entre 2 dates, indique que datiff peut vous renvoyer des valeurs erronées.

Comme le dit la documentation:

Seules les parties de date des valeurs sont utilisées dans le calcul.

qui se traduit par

select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')

renvoie 1 au lieu du 0 attendu.

La solution utilise select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); (notez l'ordre des arguments opposé par rapport à datiff).

Quelques exemples:

  • select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');retourne
  • select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00');retourne 1
  • select timestampdiff(DAY, '2016-04-13 11:00:00', now());retourne combien de jours complets ont passé depuis le 2016-04-13 11:00:00 jusqu'à présent.

J'espère que cela aidera quelqu'un, car au début, il n'est pas évident de comprendre pourquoi de Diff renvoie des valeurs qui semblent inattendues ou erronées.

34

Utilisez la fonction DATEDIFF() .

Exemple de documentation:

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

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

6
theblang

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

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

sortie

journées

 335
4
vijayabalan
SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM  membership_dates md

sortie::

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 ça aidera quelqu'un à l'avenir

2
Developer