Nejlepší způsob, jak tento problém vyřešit, je převést data na číslo mezi 0 a 365 odpovídající dni v roce. Pak jednoduše vyberete data, kde je tento rozdíl menší než 14, a získáte tak dvoutýdenní okno.
To se na začátku nebo na konci roku zlomí. Ale jednoduchá modulární aritmetika vám dá odpověď.
Naštěstí má MySQL DAYOFYEAR(date)
, takže to není tak složité:
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
To extra + 365
je potřeba, protože MOD MySQL vrátí záporná čísla.
Tato odpověď nezohledňuje správně přestupné roky. Pokud aktuální rok není přestupným rokem a aktuální datum je do 14 dnů od konce roku, pak zmeškáte jeden den v lednu, který jste měli zahrnout. Pokud vám na tom záleží, měli byste nahradit 365
s [the number of days in the year - 1
].