Включение конечной даты в MySQL запросе с оператором BETWEEN

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

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

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

Оператор BETWEEN в MySQL, безусловно, включает в себя обе границы диапазона. Однако есть особенность использования этого оператора с полями типа DATETIME: по умолчанию, если время не указано явно, оно инициализируется значением 00:00:00. Чтобы диапазон дат охватывал полный день, используйте формат 'YYYY-MM-DD 23:59:59' для конца интервала.

Пример запроса, включающего полный день:

SQL
Скопировать код
SELECT * FROM thoughts_table
WHERE thought_datetime BETWEEN '2023-01-01' AND '2023-01-31 23:59:59';
Кинга Идем в IT: пошаговый план для смены профессии

Обращаем внимание на детали: раскрывая between и даты

Чтобы еще лучше использовать оператор BETWEEN, полезно понимать его взаимодействие с полями DATE и DATETIME. В случае с DATE всё просто, но DATETIME или TIMESTAMP обладают своими нюансами.

В границах включающего between

Согласно документации MySQL, оператор BETWEEN охватывает обе границы диапазона, что аналогично выражению >= AND <=.

Работа с datetime

При использовании полей DATETIME или TIMESTAMP, имеющих часовой компонент, поведение BETWEEN меняется. Имеется два подхода:

  • Добавить к конечной дате 23:59:59, чтобы учесть все секунды дня.
  • Использовать преобразование типов, ежели время не является важным комонентом.

Пример преобразования DATETIME в DATE для игнорирования времени:

SQL
Скопировать код
SELECT * FROM users
WHERE CAST(dob AS DATE) BETWEEN '2023-01-01' AND '2023-01-31';

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

Оператор BETWEEN в MySQL можно визуализировать как коридор с чётко определёнными точками входа и выхода:

Markdown
Скопировать код
Вход 🚪: 1️⃣ (Включен) | Пространство коридора: 1️⃣ 2️⃣ 3️⃣ ... 9️⃣ 🔟 | Выход 🚪: 🔟 (Включен)
SQL
Скопировать код
SELECT * FROM table WHERE column BETWEEN 1 AND 10;

Это словно путешествие из точки A (начало) в точку B (конец), при котором вы помещаете в сказку каждый промежуточный элемент:

Markdown
Скопировать код
👉 A 🚗----------------------🚗 B 👈

Важность применения точных временных диапазонов

Важность правильной работы с полями Datetime и Timestamp не может быть недооценена:

Значение точности timestamp

Чтобы учесть каждую секунду, корректно устанавливайте конечное время 23:59:59.

Преобразование datetime

В случаях, когда время не имеет решающего значения, используйте CAST, чтобы работать только с датами и избегнуть риска пропустить важные данные.

Сравнение для ясности

Иногда используйте операторы >= и <= вместо BETWEEN для большей наглядности.

Знание типов данных

Будьте знакомы с различиями между типами DATETIME и DATE – это обеспечит высокую точность ваших запросов.

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

  1. MySQL :: Руководство по MySQL 8.0 :: 12.4.2 Функции сравнения и операторы — Официальное руководство по использованию оператора BETWEEN.
  2. Оператор SQL BETWEEN — Экспресс-курс с примерами использования BETWEEN.
  3. Является ли оператор SQL BETWEEN включающим или исключающим? – Stack Overflow — Обсуждение оператора BETWEEN.
  4. SQL: Условие BETWEEN — Практические примеры использования BETWEEN.