SQL: выбрать записи за день без ошибки времени
Для выборки всех записей за день по столбцу timestamp используйте полуоткрытый интервал: created_at >= начало_дня AND created_at < начало_следующего_дня. Так запрос включает любое время внутри дня и не зависит от точности дробных секунд.
Записи за конкретный день
CREATE TEMP TABLE events (id int, created_at timestamp);
INSERT INTO events VALUES
(1, TIMESTAMP '2026-10-25 00:00:00'),
(2, TIMESTAMP '2026-10-25 23:59:59.900'),
(3, TIMESTAMP '2026-10-26 00:00:00');
SELECT id FROM events
WHERE created_at >= TIMESTAMP '2026-10-25 00:00:00'
AND created_at < TIMESTAMP '2026-10-26 00:00:00'
ORDER BY id;Записи с id 1 и 2 попадут в результат, строка следующего дня — нет.
Почему не BETWEEN?
BETWEEN включает обе границы. Условие BETWEEN '2026-10-25 00:00:00' AND '2026-10-25 23:59:59' пропустит значения с дробными долями секунды после 23:59:59.
Тип столбца | Важный нюанс |
|---|---|
| Сравнивается с календарной датой |
| Время без часового пояса |
| Момент времени; границы задавайте в нужной зоне |
Можно ли обернуть столбец в DATE(created_at)?
Можно, но функция над столбцом может помешать обычному индексу. Диапазонные границы обычно проще оптимизировать; проверьте план запроса.