Die beste Art, sich dieses Problem vorzustellen, besteht darin, Ihre Daten in eine Zahl zwischen 0 und 365 umzuwandeln, die dem Tag im Jahr entspricht. Wenn Sie dann einfach Daten auswählen, an denen dieser Unterschied weniger als 14 beträgt, erhalten Sie Ihr zweiwöchiges Fenster.
Das wird Anfang oder Ende des Jahres zusammenbrechen. Aber einfache modulare Arithmetik gibt Ihnen die Antwort.
Glücklicherweise hat MySQL DAYOFYEAR(date)
, also ist es nicht so kompliziert:
SELECT * FROM tbl t
WHERE
MOD(DAYOFYEAR(currdate) - DAYOFYEAR(t.the_date) + 365, 365) <= 14
OR MOD(DAYOFYEAR(t.the_date) - DAYOFYEAR(currdate) + 365, 365) <= 14
Das zusätzliche + 365
wird benötigt, da MOD von MySQL negative Zahlen zurückgibt.
Diese Antwort berücksichtigt Schaltjahre nicht richtig. Wenn das aktuelle Jahr kein Schaltjahr ist und das aktuelle Datum innerhalb von 14 Tagen vor dem Jahresende liegt, entgeht Ihnen ein Tag im Januar, den Sie hätten einbeziehen sollen. Wenn Ihnen das wichtig ist, dann sollten Sie 365
ersetzen mit [the number of days in the year - 1
].