Работа с датами и временем: 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;

Важные нюансы работы с временем ⚠️

  1. Часовые пояса — всегда учитывайте TIME ZONE при работе с глобальными системами
  2. Летнее время — может влиять на расчёты
  3. Производительность — индексируйте временные поля для быстрого поиска

Практическое задание 🛠️

Создайте таблицу для отслеживания рабочего времени сотрудников:

CREATE TABLE employee_time_tracking (
    employee_id INT,
    check_in TIMESTAMP,
    check_out TIMESTAMP
);

-- Заполните таблицу тестовыми данными
-- Напишите запрос для расчёта продолжительности рабочего дня каждого сотрудника
-- Найдите сотрудников, которые работали больше 8 часов

Время — ваш союзник! ⏱️

Освоив эти техники, вы сможете:

  • Анализировать сезонные тенденции
  • Строить временные прогнозы
  • Оптимизировать бизнес-процессы
  • Автоматизировать отчёты с временными метками

Теперь вы готовы покорять временные данные в SQL! Главное — практиковаться и экспериментировать.

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

🎥 YouTube: программирование простым языком

Канал, где я спокойно и по шагам объясняю сложные темы — без заумных терминов и лишней теории.

Подходит, если раньше «не заходило», но хочется наконец понять.

▶️ Смотреть курсы на YouTube