Работа с датами и временем: DATE, TIME, TIMESTAMP, INTERVAL
Время — ваш лучший друг в SQL! ⏳
Работа с датами и временем — один из самых важных навыков аналитика. Давайте разберёмся, как SQL помогает управлять временными данными эффективно и точно.
Основные типы временных данных 📅
В SQL есть несколько ключевых типов для работы с временными данными:
DATE -- Только дата (2023-11-15)
TIME -- Только время (14:30:00)
TIMESTAMP -- Дата и время (2023-11-15 14:30:00)
INTERVAL -- Промежуток времени (2 DAYS 5 HOURS)
DATE: Работа с датами
Когда вам нужно хранить только дату без времени — используйте DATE.
Пример создания таблицы с датами:
CREATE TABLE events (
event_id INT,
event_name VARCHAR(100),
event_date DATE
);
Вставка данных:
INSERT INTO events VALUES
(1, 'День рождения', '2023-12-31'),
(2, 'Собеседование', CURRENT_DATE);
Полезные функции:
SELECT
event_name,
EXTRACT(YEAR FROM event_date) AS year,
EXTRACT(MONTH FROM event_date) AS month,
event_date + INTERVAL '1 day' AS next_day
FROM events;
TIME: Когда важны часы и минуты ⏰
Тип TIME хранит только временную часть без даты.
Пример использования:
CREATE TABLE schedule (
task_id INT,
task_name VARCHAR(100),
start_time TIME,
end_time TIME
);
INSERT INTO schedule VALUES
(1, 'Утренняя пробежка', '07:00:00', '07:30:00'),
(2, 'Обед', '12:30:00', '13:15:00');
Расчёт продолжительности:
SELECT
task_name,
end_time - start_time AS duration
FROM schedule;
TIMESTAMP: Полная картина 🎯
Когда нужны и дата, и время — TIMESTAMP ваш лучший выбор.
Пример работы с метками времени:
CREATE TABLE orders (
order_id INT,
product_name VARCHAR(100),
order_time TIMESTAMP
);
INSERT INTO orders VALUES
(1, 'Ноутбук', '2023-11-15 09:15:23'),
(2, 'Смартфон', CURRENT_TIMESTAMP);
Анализ временных данных:
SELECT
product_name,
EXTRACT(HOUR FROM order_time) AS hour_of_day,
order_time AT TIME ZONE 'UTC' AS utc_time
FROM orders;
INTERVAL: Магия временных промежутков ✨
Интервалы позволяют работать с периодами времени.
Практические примеры:
-- Добавление интервала к дате
SELECT CURRENT_DATE + INTERVAL '10 days' AS future_date;
-- Вычитание интервалов
SELECT CURRENT_TIMESTAMP - INTERVAL '2 hours' AS two_hours_ago;
-- Сравнение интервалов
SELECT
INTERVAL '1 day' > INTERVAL '23 hours' AS is_longer;
Продвинутые временные операции 🔥
1. Форматирование дат:
SELECT
order_time,
TO_CHAR(order_time, 'DD-MM-YYYY HH24:MI') AS formatted_time
FROM orders;
2. Разница между датами:
SELECT
event_name,
event_date - CURRENT_DATE AS days_remaining
FROM events;
3. Округление времени:
SELECT
order_time,
DATE_TRUNC('hour', order_time) AS rounded_to_hour
FROM orders;
Важные нюансы работы с временем ⚠️
- Часовые пояса — всегда учитывайте
TIME ZONEпри работе с глобальными системами - Летнее время — может влиять на расчёты
- Производительность — индексируйте временные поля для быстрого поиска
Практическое задание 🛠️
Создайте таблицу для отслеживания рабочего времени сотрудников:
CREATE TABLE employee_time_tracking (
employee_id INT,
check_in TIMESTAMP,
check_out TIMESTAMP
);
-- Заполните таблицу тестовыми данными
-- Напишите запрос для расчёта продолжительности рабочего дня каждого сотрудника
-- Найдите сотрудников, которые работали больше 8 часов
Время — ваш союзник! ⏱️
Освоив эти техники, вы сможете:
- Анализировать сезонные тенденции
- Строить временные прогнозы
- Оптимизировать бизнес-процессы
- Автоматизировать отчёты с временными метками
Теперь вы готовы покорять временные данные в SQL! Главное — практиковаться и экспериментировать.