Wie erhalte ich die Anzahl der Tage Differenz zwischen zwei Daten auf MySQL?


162

Ich muss die Anzahl der Tage innerhalb einiger Daten auf MySQL ermitteln.

Beispielsweise:

  • Eincheckdatum ist 12-04-2010
  • Überprüfe das Datum 15-04-2010

Der Tagesunterschied wäre 3

Antworten:


261

Was ist mit der DATEDIFF- Funktion?

Zitieren der Handbuchseite:

DATEDIFF () gibt expr1 - expr2 zurück, ausgedrückt als Wert in Tagen von einem Datum zum anderen. Ausdruck1 und Ausdruck2 sind Datums- oder Datums- und Uhrzeitausdrücke. Bei der Berechnung werden nur die Datumsteile der Werte verwendet


In Ihrem Fall würden Sie verwenden:

mysql> select datediff('2010-04-15', '2010-04-12');
+--------------------------------------+
| datediff('2010-04-15', '2010-04-12') |
+--------------------------------------+
|                                    3 | 
+--------------------------------------+
1 row in set (0,00 sec)

Beachten Sie jedoch, dass die Daten so geschrieben sein YYYY-MM-DDsollten und nicht so, DD-MM-YYYYwie Sie sie gepostet haben.


Ja, ich habe das Datumsformat vergessen, als ich die Frage gestellt habe. P Danke
Audel

4
PS JJJJ-MM-TT ist ISO 8601-Standard, daher sollte jeder diesen verwenden. Sehr praktisch.
Ernestas Stankevičius

4
Hinweis : Das erste Argument muss größer sein als das zweite Argument für die datediff()Methode, da es sonst einen negativen Wert zurückgibt.
Shashanth

38

Hinweis: Wenn Sie VOLLSTÄNDIGE 24-Stunden- Tage zwischen zwei Daten zählen möchten, kann dateiff falsche Werte für Sie zurückgeben.

In der Dokumentation heißt es:

Bei der Berechnung werden nur die Datumsteile der Werte verwendet.

was in ... endet

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

gibt 1 statt der erwarteten 0 zurück.

Die Lösung verwendet select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); (beachten Sie die entgegengesetzte Reihenfolge der Argumente im Vergleich zu datiert).

Einige Beispiele:

  • select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); gibt 0 zurück
  • select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00'); gibt 1 zurück
  • select timestampdiff(DAY, '2016-04-13 11:00:00', now()); Gibt zurück, wie viele volle 24-Stunden-Tage seit dem 13.04.2016 um 11:00:00 Uhr bis jetzt vergangen sind .

Ich hoffe, es wird jemandem helfen, denn zunächst ist nicht klar, warum datiertiff Werte zurückgibt, die unerwartet oder falsch zu sein scheinen.


seltsam, dass die Argumente zwischen datediff()und umgedreht werden timestampdiff().
Billynoah

17

Verwenden Sie die DATEDIFF()Funktion.

Beispiel aus der Dokumentation:

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


5

Tage zwischen aktuellem Datum und Zieldatum abrufen

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

Ausgabe

Tage

 335

2
SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM  membership_dates md

Ausgabe::

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

hoffe es hilft jemandem in Zukunft

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.