Как выбрать значения из диапазона в SQL (BETWEEN)?
Хочу выбрать заказы за период с 1 по 31 января, или товары с ценой от 100 до 500. Как выбрать диапазон значений в SQL? Удобнее ли BETWEEN, чем два условия с >= и <=?
2 ответа
Для диапазона есть оператор BETWEEN, который проверяет «значение между a и b включительно»:
SELECT * FROM products
WHERE price BETWEEN 100 AND 500;
Это равносильно:
WHERE price >= 100 AND price <= 500
Границы входят в диапазон — товары по 100 и по 500 попадут в результат. Это главное, что надо запомнить: BETWEEN всегда включает оба конца.
Работает и с датами:
SELECT * FROM orders
WHERE created_at BETWEEN '2026-01-01' AND '2026-01-31';
Важная ловушка с датами и временем. Если в столбце хранится дата вместе со временем (timestamp), то BETWEEN '2026-01-01' AND '2026-01-31' обрежет последний день: '2026-01-31' без времени трактуется как 2026-01-31 00:00:00, и заказы, сделанные днём 31 января, не попадут. Безопаснее писать:
WHERE created_at >= '2026-01-01'
AND created_at < '2026-02-01';
Нижняя граница «больше или равно», верхняя «строго меньше» начала следующего месяца — так не потеряете ни одной записи. Есть и NOT BETWEEN для исключения диапазона.
BETWEEN — это просто синтаксический сахар: он не быстрее и не медленнее, чем >= AND <=, движок их выполняет одинаково. Выбирайте по читаемости. Но из-за коварства с включающими границами и временем многие опытные разработчики для дат вообще предпочитают явные >= и <, чтобы не гадать, входит конец или нет.