Выгрузка за месяц через BETWEEN теряет заказы последнего дня
Поле created_at имеет тип timestamp (дата и время). Отчёт за январь выгружают запросом:
SELECT *
FROM orders
WHERE created_at BETWEEN '2026-01-01' AND '2026-01-31';
Бухгалтерия жалуется, что часть заказов последнего дня месяца в отчёт не попала.
Что происходит?
- Дата без времени трактуется как момент 00:00:00, поэтому в диапазон попадают только заказы ровно на полночь 31 января, а всё остальное за этот день отсекается
- Проблема в часовом поясе: заказы сохраняются в UTC, а отчёт строится по локальному времени, поэтому смещение сдвигает обе границы диапазона и часть суток теряется
- Строковые литералы дат нельзя сравнивать с timestamp, поэтому часть строк сравнивается как текст и выпадает
- BETWEEN не включает границы диапазона, поэтому теряются и первый, и последний день
