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
War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top