Включение конечной даты в MySQL запросе с оператором BETWEEN
Быстрый ответ
Оператор BETWEEN в MySQL, безусловно, включает в себя обе границы диапазона. Однако есть особенность использования этого оператора с полями типа DATETIME
: по умолчанию, если время не указано явно, оно инициализируется значением 00:00:00
. Чтобы диапазон дат охватывал полный день, используйте формат 'YYYY-MM-DD 23:59:59'
для конца интервала.
Пример запроса, включающего полный день:
SELECT * FROM thoughts_table
WHERE thought_datetime BETWEEN '2023-01-01' AND '2023-01-31 23:59:59';
Обращаем внимание на детали: раскрывая between
и даты
Чтобы еще лучше использовать оператор BETWEEN
, полезно понимать его взаимодействие с полями DATE
и DATETIME
. В случае с DATE
всё просто, но DATETIME
или TIMESTAMP
обладают своими нюансами.
В границах включающего between
Согласно документации MySQL, оператор BETWEEN
охватывает обе границы диапазона, что аналогично выражению >= AND <=
.
Работа с datetime
При использовании полей DATETIME
или TIMESTAMP
, имеющих часовой компонент, поведение BETWEEN
меняется. Имеется два подхода:
- Добавить к конечной дате
23:59:59
, чтобы учесть все секунды дня. - Использовать преобразование типов, ежели время не является важным комонентом.
Пример преобразования DATETIME
в DATE
для игнорирования времени:
SELECT * FROM users
WHERE CAST(dob AS DATE) BETWEEN '2023-01-01' AND '2023-01-31';
Визуализация
Оператор BETWEEN
в MySQL можно визуализировать как коридор с чётко определёнными точками входа и выхода:
Вход 🚪: 1️⃣ (Включен) | Пространство коридора: 1️⃣ 2️⃣ 3️⃣ ... 9️⃣ 🔟 | Выход 🚪: 🔟 (Включен)
SELECT * FROM table WHERE column BETWEEN 1 AND 10;
Это словно путешествие из точки A
(начало) в точку B
(конец), при котором вы помещаете в сказку каждый промежуточный элемент:
👉 A 🚗----------------------🚗 B 👈
Важность применения точных временных диапазонов
Важность правильной работы с полями Datetime
и Timestamp
не может быть недооценена:
Значение точности timestamp
Чтобы учесть каждую секунду, корректно устанавливайте конечное время 23:59:59
.
Преобразование datetime
В случаях, когда время не имеет решающего значения, используйте CAST
, чтобы работать только с датами и избегнуть риска пропустить важные данные.
Сравнение для ясности
Иногда используйте операторы >=
и <=
вместо BETWEEN
для большей наглядности.
Знание типов данных
Будьте знакомы с различиями между типами DATETIME
и DATE
– это обеспечит высокую точность ваших запросов.
Полезные материалы
- MySQL :: Руководство по MySQL 8.0 :: 12.4.2 Функции сравнения и операторы — Официальное руководство по использованию оператора BETWEEN.
- Оператор SQL BETWEEN — Экспресс-курс с примерами использования BETWEEN.
- Является ли оператор SQL BETWEEN включающим или исключающим? – Stack Overflow — Обсуждение оператора
BETWEEN
. - SQL: Условие BETWEEN — Практические примеры использования BETWEEN.