BETWEEN для диапазонов
Используйте BETWEEN для включающих числовых диапазонов и диапазонов дат, а для полуоткрытых интервалов выбирайте явные сравнения >= и <
«BETWEEN для диапазонов» — бесплатный урок SQL Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
BETWEEN включает границы
BETWEEN a AND b сопоставляет значения, для которых выполняется x >= a AND x <= b. Обе конечные точки включаются в диапазон.
SELECT * FROM orders WHERE total BETWEEN 100 AND 500;
-- equivalent to:
SELECT * FROM orders WHERE total >= 100 AND total <= 500;Диапазоны дат
BETWEEN также работает с датами и временными метками:
SELECT * FROM orders
WHERE created_at BETWEEN '2024-01-01' AND '2024-12-31';Ловушка включённых границ
При использовании столбца TIMESTAMP значение BETWEEN '2024-12-31' заканчивается в полночь 31 декабря, а НЕ в конце этого дня. Заказы, размещённые 31 декабря в 14:00, исключаются.
-- WRONG — misses orders later on Dec 31:
WHERE created_at BETWEEN '2024-12-01' AND '2024-12-31';
-- RIGHT — half-open interval:
WHERE created_at >= '2024-12-01'
AND created_at < '2025-01-01';Для времени предпочитайте полуоткрытые интервалы
Шаблон полуоткрытого интервала >= start AND < next_period однозначен, работает при любой точности и естественно соединяется с соседними периодами.
WHERE created_at >= date_trunc('month', NOW())
AND created_at < date_trunc('month', NOW()) + INTERVAL '1 month';NOT BETWEEN
Обратная операция к BETWEEN — исключает диапазон:
SELECT * FROM products WHERE price NOT BETWEEN 10 AND 20;
-- equivalent to: price < 10 OR price > 20Запросы по диапазону и индексы
Индекс B-tree помогает выполнять запросы по диапазону. В составных индексах для наилучшей избирательности столбец с диапазоном следует размещать последним:
CREATE INDEX orders_user_total_idx ON orders (user_id, total);
-- Efficient: equality on user_id, range on total
SELECT * FROM orders
WHERE user_id = 42 AND total BETWEEN 100 AND 500;Строки и BETWEEN
BETWEEN сравнивает строки лексикографически. Учитывайте регистр:
SELECT * FROM users WHERE last_name BETWEEN 'A' AND 'C';
-- Includes 'Adams' and 'Bond', excludes 'C' itself only if 'C' < 'Ca...'Типы диапазонов (PostgreSQL)
В PostgreSQL есть специальные типы диапазонов для полуоткрытых интервалов:
SELECT int4range(10, 20) @> 15; -- true (15 in [10,20))
SELECT tsrange('2024-01-01', '2025-01-01') @> NOW()::TIMESTAMP;Проверка диапазонов с помощью CHECK
Убедитесь, что start <= end в момент вставки:
CREATE TABLE bookings (
id BIGSERIAL PRIMARY KEY,
start_at TIMESTAMPTZ NOT NULL,
end_at TIMESTAMPTZ NOT NULL,
CHECK (start_at < end_at)
);Разбиение чисел на диапазоны
Объедините BETWEEN с CASE, чтобы создать диапазоны:
SELECT id, total,
CASE
WHEN total BETWEEN 0 AND 99 THEN 'small'
WHEN total BETWEEN 100 AND 999 THEN 'medium'
ELSE 'large'
END AS bucket
FROM orders;BETWEEN SYMMETRIC
Расширение стандарта SQL, которому не важно, какая сторона меньше:
SELECT 5 BETWEEN SYMMETRIC 10 AND 1; -- TRUEИтоги
BETWEEN — удобная сокращённая запись диапазона с включёнными границами.
- Помните о границах временных меток — предпочитайте полуоткрытый интервал
>= start AND < end - Составные индексы ускоряют запросы по диапазону
- Ограничения CHECK обеспечивают корректность диапазонов
Быстрая проверка
Включаются ли обе конечные точки BETWEEN a AND b в стандартном SQL?
Часто задаваемые вопросы
Урок «BETWEEN для диапазонов» бесплатный?
Да — полный текст урока «BETWEEN для диапазонов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «BETWEEN для диапазонов»?
Используйте BETWEEN для включающих числовых диапазонов и диапазонов дат, а для полуоткрытых интервалов выбирайте явные сравнения >= и < Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «BETWEEN для диапазонов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Шаблоны LIKE и подстановочные символы
- IN и NOT IN для множеств
- BETWEEN для диапазонов
- IS NULL, IS NOT NULL и COALESCE