Bạn cần phân biệt hai trường hợp.
-
Khi
first < last
, các ngày trong cùng một năm. Sau đó, bạn có thể sử dụngbetween
để khớp với ngày. -
Khi
first > last
, nó có nghĩa làlast
là trong năm tới. Trong trường hợp này, các ngày phù hợp làdate >= first OR date <= last
.
Vì vậy, mệnh đề WHERE của bạn phải là:
WHERE IF(first < last, @date BETWEEN first AND last,
@date >= first OR date <= last)