Текст, числа и даты в условиях
Условия WHERE ведут себя немного по-разному в зависимости от типа данных. Разберём каждый.
Числа
Числа пишутся без кавычек:
WHERE age = 25
WHERE price > 1000
WHERE quantity != 0
WHERE score BETWEEN 60 AND 100
BETWEEN, удобный способ задать диапазон (включительно):
-- Эквивалентно: WHERE price >= 1000 AND price <= 5000
WHERE price BETWEEN 1000 AND 5000
Текст
Текст всегда в одинарных кавычках:
WHERE city = 'Москва'
WHERE status = 'completed'
WHERE category != 'архив'
Регистр важен в PostgreSQL: 'Москва' и 'москва', разные строки.
Для поиска без учёта регистра:
WHERE LOWER(city) = 'москва'
-- или
WHERE city ILIKE 'москва'
Даты
Даты пишутся в кавычках в формате YYYY-MM-DD:
-- Конкретная дата
WHERE created_at = '2024-01-15'
-- После даты
WHERE created_at >= '2024-01-01'
-- Диапазон дат
WHERE created_at BETWEEN '2024-01-01' AND '2024-01-31'
-- За последние 30 дней
WHERE created_at >= CURRENT_DATE - INTERVAL '30 days'
-- Текущий год
WHERE EXTRACT(YEAR FROM created_at) = 2024
Работа с частями даты
-- Только заказы за январь
WHERE EXTRACT(MONTH FROM created_at) = 1
-- Только в 2024 году
WHERE DATE_TRUNC('year', created_at) = '2024-01-01'
-- День недели (1=понедельник, 7=воскресенье)
WHERE EXTRACT(DOW FROM created_at) IN (6, 7) -- выходные
Практический пример
-- Активные пользователи из Москвы, зарегистрированные в 2024
SELECT name, email
FROM users
WHERE city = 'Москва'
AND is_active = true
AND created_at >= '2024-01-01';
💡 Главная мысль: Текст, в одинарных кавычках, числа, без, даты, в кавычках формата YYYY-MM-DD. BETWEEN удобен для диапазонов, CURRENT_DATE, для "сегодня".