Comment puis-je obtenir la différence entre deux horodatages en jours? Devrais-je utiliser une colonne datetime pour cela?
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)
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 |
+------+
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).
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
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)
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 reviendradiff
16.8629
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.