Если вы хотите найти все даты 28 Dec 2011
и 17 Jan 2012
, вы можете использовать это:
WHERE DateColumn BETWEEN '2012-01-07' - INTERVAL 10 DAY
AND '2012-01-07' + INTERVAL 10 DAY
Для более общей проблемы я вижу 2 подхода. Легко написать, но, вероятно, медленно с большой foos
таблицей:
SELECT f.*
FROM
foos AS f
CROSS JOIN
( SELECT 32 * MONTH(StartDate) + DAY(StartDate)
AS StartCheck
, 32 * MONTH(EndDate) + DAY(EndDate)
AS EndCheck
FROM
( SELECT ('2012-01-07' - INTERVAL 10 DAY) AS StartDate
, ('2012-01-07' + INTERVAL 10 DAY) AS EndDate
) AS c
) AS cc
WHERE 32*MONTH(f.DateColumn)+DAY(f.DateColumn) BETWEEN StartCheck
AND EndCheck
OR StartCheck > EndCheck
AND 32*MONTH(f.DateColumn)+DAY(f.DateColumn) NOT BETWEEN EndCheck + 1
AND StartCheck - 1