Вступить в клуб →
средняявопросSQL и проверка данных

Выгрузка за месяц через 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 не включает границы диапазона, поэтому теряются и первый, и последний день

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела