Занятие 11. Практикум 3
⚡ Кратко: суть темы
Практикум закрепляет работу с датами, временем и преобразованием типов. Десять задач на текущую дату, день недели, интервалы, разницу между датами и явное приведение к строке.
NOW(),CURDATE()— текущие дата и время.DAYNAME,DAYOFWEEK— день недели.DATE_ADD,DATE_SUB,DATEDIFF— вычисления с датами.CAST(... AS CHAR)— явное преобразование в строку.
Что запомнить: практикума хватит, чтобы уверенно читать и писать запросы с датами.
Частая ошибка: в MySQL DAYOFWEEK считает воскресенье первым днём (1), а субботу — седьмым (7).
📖 Текущая дата и время
Для получения текущего момента используются функции NOW(), CURDATE() и CURTIME().
SELECT NOW() AS current_date_time; -- 2024-08-30 14:25:00
SELECT CURDATE() AS current_date; -- 2024-08-30
SELECT CURTIME() AS current_time; -- 14:25:00
📖 День недели
В MySQL есть два удобных способа получить день недели:
DAYNAME(date)— название дня на английском, напримерFriday.DAYOFWEEK(date)— номер дня недели: 1 = воскресенье, 7 = суббота.
SELECT id, order_date, DAYNAME(order_date) AS day_of_week
FROM orders;
SELECT id, order_date, DAYOFWEEK(order_date) AS day_number
FROM orders;
Проверить по документации: в некоторых СУБД нумерация дней недели начинается с понедельника. В MySQL DAYOFWEEK начинает с воскресенья.
📖 Интервалы: прибавление и вычитание дней
Функции DATE_ADD и DATE_SUB принимают выражение INTERVAL value unit.
-- Прибавить 30 дней к дате заказа
SELECT id, order_date,
DATE_ADD(order_date, INTERVAL 30 DAY) AS new_order_date
FROM orders;
-- Дата через 100 дней от текущей
SELECT DATE_ADD(CURDATE(), INTERVAL 100 DAY) AS date_in_100_days;
-- Дата 15 дней назад
SELECT DATE_SUB(CURDATE(), INTERVAL 15 DAY) AS date_15_days_ago;
📖 Разница между датами
DATEDIFF(date1, date2) возвращает количество дней между двумя датами (результат = date1 - date2).
SELECT id, order_date, shipped_date,
DATEDIFF(shipped_date, order_date) AS days_to_ship
FROM orders;
📖 Явное преобразование в строку
В MySQL для преобразования числа или даты в строку используется CAST(expression AS CHAR). Важно: VARCHAR(n) в CAST не поддерживается, используйте CHAR(n).
SELECT CAST(id AS CHAR(10)) AS id_as_string
FROM customers;
✨ Советы по практикуму
- Выполняйте запросы по одному и сверяйте результат с ожидаемым.
- Обращайте внимание на тип возвращаемого значения: дата, число или строка.
- Если результат с
DAYOFWEEKкажется странным, проверьте нумерацию дней.