mysql where date




MySql Unterschied zwischen zwei Zeitstempeln in Tagen? (5)

Wie kann ich die Differenz zwischen zwei Zeitstempeln in Tagen ermitteln? Soll ich dafür eine datetime-Spalte verwenden?

Ich habe meine Kolumne auf datetime umgestellt. Einfache Subtraktion scheint mir in Tagen kein Ergebnis zu geben.

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)

Ich glaube nicht, dass diff in Sekunden ist, denn wenn ich diff durch die Anzahl von Sekunden pro Tag (86.400) dividiere, bekomme ich keine sinnvolle Antwort:

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)

Ich weiß, dass es ziemlich alt ist, aber ich sage nur der Einfachheit halber - ich habe nach dem gleichen Problem gesucht und bin hierher gekommen, aber ich brauchte den Unterschied in Tagen.

Ich habe SELECT (UNIX_TIMESTAMP(DATE1) - UNIX_TIMESTAMP(DATE2))/60/60/24 Unix_timestamp gibt die Differenz in Sekunden zurück. Dann teile ich mich in Minuten (Sekunden / 60), Stunden (Minuten / 60), Tage (Stunden) auf / 24).


SELECT DATEDIFF (max_date, min_date) als Tage aus meiner Tabelle. Dies funktioniert auch, wenn sich die max_date und min_date in String-Datentypen befinden.


Wenn Sie die Differenz in Tagen bis zur zweiten Abrechnung benötigen:

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

Es wird wiederkommen
diff
16.8629


Wenn Sie im vollständigen TIMESTAMP-Format zurückkehren möchten, probieren Sie es aus: -

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

zurückkommen wie

     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)




timestamp