web-dev-qa-db-fra.com

MySql différence entre deux horodatages en jours?

Comment puis-je obtenir la différence entre deux horodatages en jours? Devrais-je utiliser une colonne datetime pour cela?


Je suis passé de ma colonne à datetime. La simple soustraction ne semble pas me donner un résultat en jours. 

mysql> SELECT NOW(), last_confirmation_attempt, NOW() - last_confirmation_attempt AS diff  FROM DateClubs HAVING diff IS NOT NULL ;
+---------------------+---------------------------+-----------------+
| NOW()               | last_confirmation_attempt | diff            |
+---------------------+---------------------------+-----------------+
| 2010-03-30 10:52:31 | 2010-03-16 10:41:47       | 14001084.000000 |
+---------------------+---------------------------+-----------------+
1 row in set (0.00 sec)

Je ne pense pas que diff soit en secondes, car lorsque je divise diff par le nombre de secondes dans une journée (86 400), je n’obtiens pas de réponse sensée:

mysql> SELECT NOW(), last_confirmation_attempt, ( NOW() - last_confirmation_attempt) / 86400 AS diff  FROM DateClubs HAVING diff IS NOT NULL ;
+---------------------+---------------------------+----------------+
| NOW()               | last_confirmation_attempt | diff           |
+---------------------+---------------------------+----------------+
| 2010-03-30 10:58:58 | 2010-03-16 10:41:47       | 162.0568402778 |
+---------------------+---------------------------+----------------+
1 row in set (0.00 sec)
47
user151841

Si vous voulez ignorer la partie heure dans les colonnes, DATEDIFF () vous donnera la différence que vous recherchez en jours.

SELECT DATEDIFF('2010-10-08 18:23:13', '2010-09-21 21:40:36') AS days;
+------+
| days |
+------+
|   17 |
+------+
102
Uncle Arnie

Je sais que c'est assez vieux, mais je dirai simplement pour le plaisir - je cherchais le même problème et je suis arrivé ici, mais j'avais besoin de la différence en jours.

J'ai utilisé SELECT (UNIX_TIMESTAMP(DATE1) - UNIX_TIMESTAMP(DATE2))/60/60/24 Unix_timestamp renvoie la différence en secondes, puis je me divise en minutes (secondes/60), heures (minutes/60), jours (heures/24).

12
Enrico

Si vous voulez retourner au format TIMESTAMP complet, essayez-le: - 

 SELECT TIMEDIFF(`call_end_time`, `call_start_time`) as diff from tablename;

revenir comme 

     diff
     - - -
    00:05:15
5
Kamlesh
CREATE TABLE t (d1 timestamp, d2 timestamp);

INSERT INTO t VALUES ('2010-03-11 12:00:00', '2010-03-30 05:00:00');
INSERT INTO t VALUES ('2010-03-11 12:00:00', '2010-03-30 13:00:00');
INSERT INTO t VALUES ('2010-03-11 00:00:00', '2010-03-30 13:00:00');
INSERT INTO t VALUES ('2010-03-10 12:00:00', '2010-03-30 13:00:00');
INSERT INTO t VALUES ('2010-03-10 12:00:00', '2010-04-01 13:00:00');

SELECT d2, d1, DATEDIFF(d2, d1) AS diff FROM t;

+---------------------+---------------------+------+
| d2                  | d1                  | diff |
+---------------------+---------------------+------+
| 2010-03-30 05:00:00 | 2010-03-11 12:00:00 |   19 |
| 2010-03-30 13:00:00 | 2010-03-11 12:00:00 |   19 |
| 2010-03-30 13:00:00 | 2010-03-11 00:00:00 |   19 |
| 2010-03-30 13:00:00 | 2010-03-10 12:00:00 |   20 |
| 2010-04-01 13:00:00 | 2010-03-10 12:00:00 |   22 |
+---------------------+---------------------+------+
5 rows in set (0.00 sec)
5
Daniel Vassallo

Si vous avez besoin de la différence de jours en comptabilité jusqu'à la seconde:

SELECT TIMESTAMPDIFF(SECOND,'2010-09-21 21:40:36','2010-10-08 18:23:13')/86400 AS diff

Il reviendra
diff
16.8629 

3
Makulit A. Ko

SELECT DATEDIFF (max_date, min_date) en tant que jours dans ma table . Cela fonctionne même si les colonnes max_date et min_date sont des types de données chaîne.

0
Amit Bhat