Функции для работы с датами: NOW(), CURRENT_DATE, DATE_ADD, EXTRACT и др.

📅 Знакомство с датами в SQL: время — ваш лучший друг!

Даты и время в базах данных — это как специи в кулинарии. Без них данные теряют вкус и контекст! Давайте разберём, как профессионально управлять временем в SQL.

-- Самый простой способ получить текущую дату и время
SELECT NOW();  -- Возвращает timestamp в формате 'YYYY-MM-DD HH:MM:SS'

🔍 Базовые функции: получаем текущие дату и время

Работа с датами начинается с понимания трёх ключевых функций:

SELECT CURRENT_DATE;    -- Только дата: '2023-11-15'
SELECT CURRENT_TIME;    -- Только время: '14:30:22'
SELECT CURRENT_TIMESTAMP;  -- Дата + время: '2023-11-15 14:30:22'

Профессиональный лайфхак: В PostgreSQL используйте CURRENT_TIMESTAMP, в MySQL чаще применяют NOW() — результат идентичный!


➕ DATE_ADD и DATE_SUB: магия временных интервалов

Добавляем или вычитаем интервалы — основа для расчёта сроков:

-- Заказы, созданные более 30 дней назад
SELECT * FROM orders 
WHERE order_date < DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY);

-- MySQL вариант с DATE_ADD:
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH) AS next_month;

Важно: В PostgreSQL вместо этого используют оператор +:

-- PostgreSQL эквивалент
SELECT NOW() + INTERVAL '1 month';

✂️ EXTRACT: добываем части даты как золото

Когда нужен только год, месяц или день:

SELECT 
  EXTRACT(YEAR FROM NOW()) AS current_year,
  EXTRACT(MONTH FROM NOW()) AS current_month,
  EXTRACT(DAY FROM NOW()) AS day_of_month;

Реальный кейс: Группировка продаж по кварталам:

SELECT 
  EXTRACT(QUARTER FROM sale_date) AS quarter,
  SUM(amount) AS total_sales
FROM sales
GROUP BY quarter;

📊 DATEDIFF: считаем дни между датами

Хотите узнать возраст клиента или срок выполнения заказа?

-- MySQL:
SELECT DATEDIFF('2023-12-31', '2023-01-01') AS days_in_2023;

-- PostgreSQL (другой синтаксис):
SELECT '2023-12-31'::date - '2023-01-01'::date;

Бонус-трек: В SQL Server используйте DATEDIFF(day, start, end).


🎯 DATE_FORMAT (MySQL) и TO_CHAR (PostgreSQL): красивое форматирование

Презентуем даты по-человечески:

-- MySQL:
SELECT DATE_FORMAT(NOW(), '%W, %M %e %Y') AS pretty_date;  -- "Wednesday, November 15 2023"

-- PostgreSQL:
SELECT TO_CHAR(NOW(), 'Day, Month DD YYYY') AS pretty_date;

🚀 Продвинутые техники: временные зоны и парсинг

Для тех, кто хочет большего:

-- Работа с временными зонами (PostgreSQL)
SELECT NOW() AT TIME ZONE 'Europe/Moscow' AS moscow_time;

-- Парсинг строк в даты
SELECT STR_TO_DATE('15-11-2023', '%d-%m-%Y') AS parsed_date;  -- MySQL

💡 Главный секрет: практикуйтесь с реальными данными!

Лучший способ освоить функции дат — применить их к вашей базе:

  1. Найдите заказы за последние 7 дней
  2. Сгруппируйте продажи по месяцам
  3. Рассчитайте среднее время выполнения заказа

P.S. В разных СУБД синтаксис может отличаться — всегда проверяйте документацию вашей базы данных!

Скрыть рекламу навсегда

🌱 Индвидидулаьные занятия

Индивидуальные онлайн-занятия по программированию для детей и подростков

Личный подход, без воды, с фокусом на понимание и реальные проекты.

🚀 Записаться на занятие