Загрузка данных


Лабораторная работа «Даты и время»
1. Теоретическая часть.
Основные типы данных для хранения времени:
Тип Что хранит Пример
DATE Только дата 2025-04-15
TIME Только время 14:30:30
DATETIME Дата и время 2025-04-15 14:30:00
TIMESPAMP Дата и время с учетом
часового пояса
2025-04-15 14:30:00
Полезные функции:
Функция Что делает Пример
NOW() Текущая дата и
время
2025-04-15 15:20:00
CURDATE() Текущая дата 2025-04-15
CURTIME() Текущее время 15:20:00
YEAR(date) ,
MONTH(date) ,
DAY(date)
Извлечение
компонентов
YEAR('2025-04-15') → 2025
DATE_FORMAT(date,
format)
Форматирование
даты в строку
DATE_FORMAT(NOW(),
'%d.%m.%Y') → 15.04.2025
DATEDIFF(date1, date2) Разница в днях DATEDIFF('2025-04-15', '2025-
04-10') → 5
TIMESTAMPDIFF(unit,
start, end)
Разница в
заданных
единицах
TIMESTAMPDIFF(HOUR,
'2025-04-15 10:00', '2025-04-15
14:00') → 4
DATE_ADD(date,
INTERVAL value unit)
Добавление
интервала
DATE_ADD('2025-04-15',
INTERVAL 7 DAY) → 2025-
04-22
DATE_SUB(date,
INTERVAL value unit)
Вычитание
интервала
DATE_SUB('2025-04-15',
INTERVAL 1 MONTH) →
2025-03-15
LAST_DAY(date) Последний день
месяца
LAST_DAY('2025-04-15') →
2025-04-30
2. Пример выполнения заданий
1 задание
Выведите список вех пользователей добавив столбцы год регистрации
(reg_year), месяц регистрации числом (reg_month), день недели регистрации.
SELECT
 name,
 registered_at,
 YEAR(registered_at) AS reg_year,
 MONTH(registered_at) AS reg_month,
 DAYNAME(registered_at) AS reg_weekday
FROM users;
2 задание
Найдите все заказы, сделанные в марте 2025 года.
SELECT * FROM orders
WHERE created_at >= '2025-03-01' AND created_at < '2025-04-01';
3 задание
Найдите всех пользователей, которые зарегистрировались в последние 30
дней (относительно текущей даты).
SELECT * FROM users
WHERE registered_at >= CURDATE() - INTERVAL 30 DAY;
4 задание
Выведите заказы за сегодняшний день (учитывая, что в created_at есть
время).
SELECT * FROM orders
WHERE DATE(created_at) = CURDATE();
5 задание
Для каждого пользователя посчитайте, сколько дней прошло с момента его
регистрации до сегодняшнего дня.
SELECT
 name,
 registered_at,
 DATEDIFF(CURDATE(), registered_at) AS days_since_reg
FROM users;
6 задание
Для каждого заказа посчитайте, сколько дней прошло между регистрацией
пользователя и датой заказа.
SELECT
 u.name,
 o.amount,
 o.created_at AS order_date,
 u.registered_at AS reg_date,
 DATEDIFF(o.created_at, u.registered_at) AS days_to_order
FROM orders o
JOIN users u ON o.user_id = u.id;
7 задание
Выведите список заказов, где дата отображается в формате ДД.ММ.ГГГГ
ЧЧ:МИ.
SELECT
 id,
 user_id,
 amount,
 DATE_FORMAT(created_at, '%d.%m.%Y %H:%i') AS formatted_date
FROM orders;
8 задание
Посчитайте общую сумму заказов (total_amount) и количество заказов
(order_count) для каждого месяца 2025 года.
SELECT
 DATE_FORMAT(created_at, '%Y-%m') AS month,
 COUNT(*) AS order_count,
 SUM(amount) AS total_amount
FROM orders
WHERE YEAR(created_at) = 2025
GROUP BY DATE_FORMAT(created_at, '%Y-%m')
ORDER BY month;
9 задание
Найдите пользователя, который сделал первый заказ в 2025 году.
SELECT u.name, o.created_at
FROM orders o
JOIN users u ON o.user_id = u.id
WHERE YEAR(o.created_at) = 2025
ORDER BY o.created_at ASC
LIMIT 1;
Задание.
1. Вывести список всех сотрудников, добавив столбцы: год найма, месяц
найма числом, день недели найма (числом от 0 до 6, где 0 — понедельник).
2. Посчитать, сколько сотрудников было нанято в каждом месяце, и
отсортировать по количеству от большего к меньшему.
3. Найти все записи о посещениях за 11 апреля 2025 года.
4. Найти всех сотрудников, нанятых в последние 60 дней (относительно
текущейдаты).
5. Вывести сотрудников, у которых сегодня нет отметки о выходе
(поле check_out пустое), с указанием времени входа.
6. Для каждого сотрудника посчитать количество полных месяцев,
проработанных в компании (от даты найма до сегодняшнего дня).
7. Для каждой записи посещения посчитать продолжительность рабочего
дня в часах с одним знаком после запятой; если check_out отсутствует —
вывести NULL.
8. Вывести список посещений, где дата входа отображается в
формате ДД.ММ.ГГГГ, а время входа — в формате ЧЧ:МИ.
9. Вывести информацию о сотруднике в виде строки: "Фамилия Имя
Отчество работает с дд месяц гггг года".
10. Посчитать общее количество отработанных часов для каждого
сотрудника за апрель 2025 года (учитывать только завершённые рабочие дни)
и отсортировать по убыванию часов.
11. Найти сотрудника, который пришёл сегодня на работу раньше всех.