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';
-- весь ноябрь целиком, без потери последнего вечера
«Не спрашивайте „до какого дня“. Спрашивайте „до какого дня НЕ включая“. Между этими двумя вопросами и живёт пропавший вечер.»

Пропавший вечер лежит в архиве и ждёт. Найдите его — и заодно проверьте, не потеряли ли вы такой же в своём отчёте.

$0
тащи карточки за верхнюю кромку · «+ стикер» · «🧵 нить» — клик по двум

ЛОТОК УЛИК

во вкладке SQL найди подозреваемых и жми «+ доска»

НА ПРОВЕРКУ

теории из «Заметок» отправляются сюда — подтверди на доске или удали
Ctrl+Enter · «+ доска» на строке — выбрать поля и перенестипиши запрос, я подожду
Результат появится здесь.

Картотека

Заметки

Факты

Теории на проверку

Подсказки

◆ РЕЖИМ АРХИВАРИУСАуправление картотекой дел · не виден игроку