Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL:Wo zwischen zwei Datumsangaben ohne Jahr?

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 ].