Най-добрият начин да помислите за този проблем е да преобразувате датите си в число между 0 и 365, съответстващо на деня в годината. След това простото избиране на дати, при които тази разлика е по-малко от 14, ви дава прозореца от две седмици.
Това ще се разпадне в началото или в края на годината. Но простата модулна аритметика ви дава отговора.
За щастие MySQL има DAYOFYEAR(date)
, така че не е толкова сложно:
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
Това допълнително + 365
е необходимо, тъй като MOD на MySQL ще върне отрицателни числа.
Този отговор не отчита правилно високосните години. Ако текущата година не е високосна и текущата дата е в рамките на 14 дни от края на годината, тогава ще пропуснете един ден през януари, който трябваше да включите. Ако ви е грижа за това, тогава трябва да замените 365
с [the number of days in the year - 1
].