Musisz rozróżnić dwa przypadki.
-
Kiedy
first < last
, daty są w tym samym roku. Następnie możesz użyćbetween
aby dopasować daty. -
Kiedy
first > last
, oznaczalast
jest w przyszłym roku. W tym przypadku pasujące daty todate >= first OR date <= last
.
Więc twoja klauzula WHERE powinna brzmieć:
WHERE IF(first < last, @date BETWEEN first AND last,
@date >= first OR date <= last)