MySQL: Wie Wochen berechnen, die von einem bestimmten Datum aus?
-
08-10-2019 - |
Frage
Ich brauche die Wochen heraus zu berechnen, ab einem Zeitpunkt in meiner MySQL-Select-Anweisung. Es gibt eine Datumsspalte in einen des Tisches, und ich brauche, um zu berechnen, wie viele Wochen entfernt das Datum ist.
SELECT EventDate, (calculation) AS WeeksOut FROM Events;
Beispiel:
- 6 Tage weg, Wochen out = 0
- 7 Tage weg, Wochen out = 1
- 13 Tage weg, Wochen out = 1
- 14 Tage weg, Wochen out = 2
Lösung
Mit der DATEDIFF Funktion
ROUND(DATEDIFF(end_date, start_date)/7, 0) AS weeksout
Das Problem mit WOCHEN ist, dass es nicht korrekte Ergebnisse für Daten zurück, die überqueren 1. Januar.
Die 0
ist die Anzahl der Dezimalstellen in dem ROUND
Funktion.
Andere Tipps
Hier ist eine einfache Möglichkeit, es zu tun:
SELECT EventDate, (week(EventDate) - week(curdate())) AS WeeksOut FROM Events;
Beispiel:
mysql> select week('2010-11-18') - week ('2010-10-18');
+------------------------------------------+
| week('2010-11-18') - week ('2010-10-18') |
+------------------------------------------+
| 4 |
+------------------------------------------+
1 row in set (0.00 sec)
Eine weitere Option ist das Intervall in Tagen berechnen und dividieren durch 7:
SELECT EventDate, datediff(EventDate,curdate())/7 AS WeeksOut FROM Events;
Beispiel:
mysql> select datediff('2010-11-18' , '2010-10-18') / 7;
+-------------------------------------------+
| datediff('2010-11-18' , '2010-10-18') / 7 |
+-------------------------------------------+
| 4.4286 |
+-------------------------------------------+
1 row in set (0.00 sec)
Um über den ganzen „New Year“ -Ausgabe zu erhalten und Sie noch verwenden mögen WEEK()
, fand ich die folgende Methode sehr effektiv.
SELECT
YEAR(end_date)*52+WEEK(end_date)
- YEAR(start_date)*52 - WEEK(start_date) as weeks_out
FROM
events;
Der Unterschied bei diesem Verfahren (im Gegensatz zu dem Verfahren im Gegensatz DATEDIFF
) ist, dass es mit der Woche ausgerichtet ist. So heute (was Montag) und am vergangenen Freitag würden 1
mit dieser Methode zurückkehren, würden aber 0
mit der DATEDIFF
Methode zurückgeben