Den bedste måde at tænke på dette problem er at konvertere dine datoer til et tal mellem 0 og 365 svarende til dagen i året. Så blot at vælge datoer, hvor denne forskel er mindre end 14, giver dig dit to ugers vindue.
Det vil bryde sammen i begyndelsen eller slutningen af året. Men simpel modulær aritmetik giver dig svaret.
Heldigvis har MySQL DAYOFYEAR(date)
, så det er ikke så kompliceret:
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
Den ekstra + 365
er nødvendig, da MySQL's MOD vil returnere negative tal.
Dette svar tager ikke korrekt højde for skudår. Hvis det aktuelle år ikke er et skudår, og datoen er inden for 14 dage efter årets udgang, går du glip af en dag i januar, som du burde have inkluderet. Hvis du bekymrer dig om det, bør du erstatte 365
med [the number of days in the year - 1
].