BETWEEN с датами: последний день исчезает
Отчёт за ноябрь. Границы месяца ставите ровно теми датами, что на календаре.
SELECT * FROM receipts
WHERE date BETWEEN '1983-11-01' AND '1983-11-30';Тридцатое число вечером в отчёте отсутствует. Не потому, что в этот день ничего не случилось, — случилось, просто после полуночи оно уже не «тридцатое».
«BETWEEN держит слово буквально: до конца дня '30-е' — это '30-е 00:00:00', а не 'до последней минуты перед началом следующего дня».»
Куда делся тридцатый вечер?
Если в столбце хранится не только дата, но и время суток, верхняя граница BETWEEN превращается в полночь начала последнего дня — а всё, что случилось позже, из окна выпадает.
Лечение — полуоткрытый интервал: нижняя граница включительно, верхняя — уже следующий день, но строго меньше.
SELECT * FROM receipts
WHERE date >= '1983-11-01'
AND date < '1983-12-01';
-- весь ноябрь целиком, без потери последнего вечера«Не спрашивайте „до какого дня“. Спрашивайте „до какого дня НЕ включая“. Между этими двумя вопросами и живёт пропавший вечер.»
Пропавший вечер лежит в архиве и ждёт. Найдите его — и заодно проверьте, не потеряли ли вы такой же в своём отчёте.