Запрос SQL для выбора дат между двумя датами: примеры
Быстрый ответ
Чтобы выбрать записи из таблицы в SQL в рамках заданного интервала дат, используйте оператор BETWEEN
:
SELECT * FROM events WHERE event_date BETWEEN '2023-01-01' AND '2023-12-31';
Этот запрос выведет все строки из таблицы events
, где дата события оказывается между 1 января и 31 декабря 2023 года, включительно.
Подробное объяснение: работа с временными интервалами в SQL
Точность в учёте времени и регулировке полуночи
При наличии столбцов даты и времени необходимо стремиться к максимальной точности. Указывайте конкретное время в строковых литералах, чтобы избежать неопределённости по отношению к полуночи.
/* Выбор событий за 1 и 2 января, включая события до суточного перехода на второе число */
SELECT * FROM events
WHERE event_datetime BETWEEN '2023-01-01 00:00:00' AND '2023-01-02 23:59:59.999';
Применение операторов сравнения "больше или равно" и "меньше", вместо BETWEEN
Для чёткого определения границ интервала целесообразнее использовать операторы сравнения >=
и <
. Это позволит избежать неясности в отношении включения крайних точек.
/* Данные до завершения 2023 года, не включая первую секунду 2024 года */
SELECT * FROM events
WHERE event_datetime >= '2023-01-01' AND event_datetime < '2024-01-01';
Соблюдение соответствия типов данных
Следите за соответствием типов данных в столбце и используемых вами литералах. При необходимости выполняйте приведение типов данных с помощью CAST
.
/* Преобразование столбца к типу datetime */
SELECT * FROM events
WHERE CAST(event_date AS DATETIME) BETWEEN '2023-01-01' AND '2023-12-31';
Борьба с зарезервированными словами
Если название столбца совпадает со зарезервированным словом SQL, применяйте кавычки, например, [Date]
.
/* Принимаем во внимание, что [Date] – зарезервированное слово */
SELECT * FROM events
WHERE [Date] BETWEEN '2023-01-01' AND '2023-12-31';
Визуализация
Представьте календарь со всеми датами года:
📅: [1 Янв, 2 Янв, ..., 31 Дек]
Наша задача — отыскать события в интервале:
Дата начала: 🏴☠️ (10 Янв) Дата окончания: 🏁 (20 Янв)
SELECT * FROM dates WHERE date BETWEEN '2023-01-10' AND '2023-01-20';
Вы получите события за период:
🏴☠️ [10 Янв, ..., 20 Янв] 🏁
SQL-запрос является инструментом для точной настройки желаемого временного интервала.
Продвинутая работа с диапазонами дат
Учёт последней даты, включая её
Примените функцию DATEADD
, чтобы запрос включил полностью последнюю дату.
/* Добавляем один день, чтобы охватить весь интервал */
SELECT * FROM events
WHERE event_date >= '2023-01-01'
AND event_date < DATEADD(day, 1, '2023-01-02');
Выборка за один день
Для выбора данных за один день установите начальные и конечные границы на начало и конец выбранного дня.
/* Данные за новогодний день */
SELECT * FROM events
WHERE event_date >= '2023-01-01'
AND event_date < '2023-01-02';
Согласованность формата даты
Выбирайте даты в консистентном формате, чтобы избегать ошибок. Формат 'YYYY-MM-DD' является надёжным стандартом.
/* Используем стандартный и согласованный формат даты */
SELECT * FROM events
WHERE event_date BETWEEN '2023-01-01' AND '2023-12-31';
Решение проблем при работе с датами
Учёт часовых поясов
Когда вы работаете с разными часовыми поясами, обеспечьте их совместимость путём конвертации в UTC.
/* Конвертируем время в UTC для совместимости */
SELECT * FROM events
WHERE CONVERT(datetime, event_date AT TIME ZONE 'Eastern Standard Time') BETWEEN '2023-01-01' AND '2023-12-31';
Коррекция секунд
С учётом точности временных данных до секунд, применяйте соответствующие методы.
Историческая точность дат
Принимайте во внимание исторические переходы календарей, проверяя, как ваша база данных справляется с этими изменениями.
Полезные материалы
- SQL BETWEEN Operator – W3Schools — наглядное объяснение оператора
BETWEEN
. - CAST and CONVERT (Transact-SQL) – SQL Server | Microsoft Learn — руководство Microsoft по функциям
CAST
иCONVERT
. - PostgreSQL: Documentation: 9.9. Date/Time Functions and Operators — обзор функций и операторов даты и времени в PostgreSQL.
- Datetime Datatypes and Time Zone Support – Oracle — руководство Oracle по типам данных даты и времени и поддержке часовых поясов.
- SQL Server CONVERT() Function – W3Schools — руководство по функции
CONVERT
в SQL Server.