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

Audel
quelle

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.

Pascal MARTIN
quelle
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.

Konrad Gałęzowski
quelle
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
Tobias Cohen
quelle
6

Ich bevorzuge TIMESTAMPDIFF, da Sie das Gerät bei Bedarf problemlos wechseln können.

theblang
quelle
5

Tage zwischen aktuellem Datum und Zieldatum abrufen

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

Ausgabe

Tage

 335
Vijayabalan
quelle
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

Entwickler
quelle