Запрос SQL для выбора дат между двумя датами: примеры

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы выбрать записи из таблицы в SQL в рамках заданного интервала дат, используйте оператор BETWEEN:

SQL
Скопировать код
SELECT * FROM events WHERE event_date BETWEEN '2023-01-01' AND '2023-12-31';

Этот запрос выведет все строки из таблицы events, где дата события оказывается между 1 января и 31 декабря 2023 года, включительно.

Кинга Идем в IT: пошаговый план для смены профессии

Подробное объяснение: работа с временными интервалами в SQL

Точность в учёте времени и регулировке полуночи

При наличии столбцов даты и времени необходимо стремиться к максимальной точности. Указывайте конкретное время в строковых литералах, чтобы избежать неопределённости по отношению к полуночи.

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

Для чёткого определения границ интервала целесообразнее использовать операторы сравнения >= и <. Это позволит избежать неясности в отношении включения крайних точек.

SQL
Скопировать код
/* Данные до завершения 2023 года, не включая первую секунду 2024 года */
SELECT * FROM events 
WHERE event_datetime >= '2023-01-01' AND event_datetime < '2024-01-01';

Соблюдение соответствия типов данных

Следите за соответствием типов данных в столбце и используемых вами литералах. При необходимости выполняйте приведение типов данных с помощью CAST.

SQL
Скопировать код
/* Преобразование столбца к типу datetime */
SELECT * FROM events
WHERE CAST(event_date AS DATETIME) BETWEEN '2023-01-01' AND '2023-12-31';

Борьба с зарезервированными словами

Если название столбца совпадает со зарезервированным словом SQL, применяйте кавычки, например, [Date].

SQL
Скопировать код
/* Принимаем во внимание, что [Date] – зарезервированное слово */
SELECT * FROM events
WHERE [Date] BETWEEN '2023-01-01' AND '2023-12-31';

Визуализация

Представьте календарь со всеми датами года:

📅: [1 Янв, 2 Янв, ..., 31 Дек]

Наша задача — отыскать события в интервале:

Дата начала: 🏴‍☠️ (10 Янв) Дата окончания: 🏁 (20 Янв)

SQL
Скопировать код
SELECT * FROM dates WHERE date BETWEEN '2023-01-10' AND '2023-01-20';

Вы получите события за период:

🏴‍☠️ [10 Янв, ..., 20 Янв] 🏁

SQL-запрос является инструментом для точной настройки желаемого временного интервала.

Продвинутая работа с диапазонами дат

Учёт последней даты, включая её

Примените функцию DATEADD, чтобы запрос включил полностью последнюю дату.

SQL
Скопировать код
/* Добавляем один день, чтобы охватить весь интервал */
SELECT * FROM events
WHERE event_date >= '2023-01-01' 
AND event_date < DATEADD(day, 1, '2023-01-02');

Выборка за один день

Для выбора данных за один день установите начальные и конечные границы на начало и конец выбранного дня.

SQL
Скопировать код
/* Данные за новогодний день */
SELECT * FROM events
WHERE event_date >= '2023-01-01'
AND event_date < '2023-01-02';

Согласованность формата даты

Выбирайте даты в консистентном формате, чтобы избегать ошибок. Формат 'YYYY-MM-DD' является надёжным стандартом.

SQL
Скопировать код
/* Используем стандартный и согласованный формат даты */
SELECT * FROM events
WHERE event_date BETWEEN '2023-01-01' AND '2023-12-31';

Решение проблем при работе с датами

Учёт часовых поясов

Когда вы работаете с разными часовыми поясами, обеспечьте их совместимость путём конвертации в UTC.

SQL
Скопировать код
/* Конвертируем время в UTC для совместимости */
SELECT * FROM events
WHERE CONVERT(datetime, event_date AT TIME ZONE 'Eastern Standard Time') BETWEEN '2023-01-01' AND '2023-12-31';

Коррекция секунд

С учётом точности временных данных до секунд, применяйте соответствующие методы.

Историческая точность дат

Принимайте во внимание исторические переходы календарей, проверяя, как ваша база данных справляется с этими изменениями.

Полезные материалы

  1. SQL BETWEEN Operator – W3Schools — наглядное объяснение оператора BETWEEN.
  2. CAST and CONVERT (Transact-SQL) – SQL Server | Microsoft Learn — руководство Microsoft по функциям CAST и CONVERT.
  3. PostgreSQL: Documentation: 9.9. Date/Time Functions and Operators — обзор функций и операторов даты и времени в PostgreSQL.
  4. Datetime Datatypes and Time Zone Support – Oracle — руководство Oracle по типам данных даты и времени и поддержке часовых поясов.
  5. SQL Server CONVERT() Function – W3Schools — руководство по функции CONVERT в SQL Server.