3.1 Список функций для работы с датой и временем
Дата и время – это одни из самых распространенных типов данных, которые хранятся в Базах Данных. Именно поэтому список функций для работы с ними очень большой. Вот самые популярные из них:
| # | Функция | Описание |
|---|---|---|
| 1 | CURDATE() | Возвращает текущую дату |
| 2 | CURTIME() | Возвращает текущее время |
| 3 | NOW(), LOCALTIME() | Возвращает текущую дату и текущее время |
| 4 | YEAR() | Возвращает год от даты |
| 5 | MONTH() | Возвращает месяц из даты |
| 6 | DAY(), DAYOFMONTH() | Возвращает день из даты |
| 7 | HOUR() | Возвращает только часы из времени |
| 8 | MINUTE() | Возвращает минуты от времени |
| 9 | SECOND() | Возвращает секунды от времени |
| 10 | DAYNAME() | Возвращает название дня недели: Monday, ... |
| 11 | MONTHNAME() | Возвращает название месяца: Январь, … |
| 12 | WEEK() | Возвращает неделю из даты |
| 13 | WEEKDAY() | Возвращает номер дня недели: Понедельник – 0, Вторник – 1 |
| 14 | WEEKOFYEAR() | Возвращает номер недели в году |
| 15 | DAYOFWEEK() | Возвращает имя дня недели |
| 16 | DAYOFYEAR() | Возвращает день года: 1-366 |
| 17 | DATE() | Возвращает только дату от объекта «дата и время» |
| 18 | ADDDATE() | Добавляет дни к дате |
| 19 | SUBDATE() | Вычитает дни из даты |
| 20 | ADDTIME() | Добавляет время ко времени |
| 21 | SUBTIME() | Вычитает время из времени |
Я специально сгруппировал функции в небольшие группы, чтобы было легче понять, как с ними работать. Ниже мы рассмотрим по одной функции из каждой группы.
Полный список функций для работы с датой и временем ты можешь найти по ссылке: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
3.2 Вызов функций
Кстати, раз уж мы изучаем такое большое количество функций, думаю полезно будет упомянуть, что оператор SELECT не обязательно использовать вместе с FROM. Он может вернуть значение любого выражения. Общий вид которого задается шаблоном:
SELECT выражение
А если вы хотите вызвать какую-то функцию, то нужно написать код типа:
SELECT функция(параметры)
Ниже я приведу несколько примеров работы оператора SELECT без обращения к таблицам:
| # | Запрос | Результат |
|---|---|---|
| 1 | SELECT 1+1 | 2 |
| 2 | SELECT 13 MOD 5 | 3 |
| 3 | SELECT RAND() | 0.20771444235715497 |
| 4 | SELECT CURDATE() | 2022-06-04 |
| 5 | SELECT CURTIME() | 00:06:02 |
| 6 | SELECT NOW() | 2022-06-04 00:06:43 |
И, как ты можешь видеть, в таблице выше, для того чтобы получить текущую дату и время, тебе достаточно воспользоваться одной из функций:
CURDATE()– текущее дата;CURTIME()– текущая время;NOW()– текущая дата и время.
3.3 Группируем данные по году и месяцу
Давай вспомним нашу таблицу task с задачами для сотрудников. Попробуем сгруппировать задачи из этой таблицы по годам. Для этого воспользуемся функцией YEAR(), которая возвращает год от переданной в нее даты.
Первая версия нашего запроса будет выглядеть так:
SELECT
id,
employee_id ,
name,
YEAR(deadline) AS year,
deadline
FROM task
Результат этого запроса будет таким:
| id | employee_id | name | year | deadline |
|---|---|---|---|---|
| 1 | 1 | Исправить багу на фронтенде | 2022 | 2022-06-01 |
| 2 | 2 | Исправить багу на бэкенде | 2022 | 2022-06-15 |
| 3 | 5 | Купить кофе | 2022 | 2022-07-01 |
| 4 | 5 | Купить кофе | 2022 | 2022-08-01 |
| 5 | 5 | Купить кофе | 2022 | 2022-09-01 |
| 6 | (NULL) | Убрать офис | (NULL) | (NULL) |
| 7 | 4 | Наслаждаться жизнью | (NULL) | (NULL) |
| 8 | 6 | Наслаждаться жизнью | (NULL) | (NULL) |
Мы видим, что у всех строк один и тот же год, так что давай лучше используем два поля – год и месяц. Вторая версия нашего запроса будет выглядеть так:
SELECT
id,
employee_id ,
name,
YEAR(deadline) AS year,
MONTH(deadline) AS month,
deadline
FROM task
Результат этого запроса будет таким:
| id | employee_id | name | year | month | deadline |
|---|---|---|---|---|---|
| 1 | 1 | Исправить багу на фронтенде | 2022 | 6 | 2022-06-01 |
| 2 | 2 | Исправить багу на бэкенде | 2022 | 6 | 2022-06-15 |
| 3 | 5 | Купить кофе | 2022 | 7 | 2022-07-01 |
| 4 | 5 | Купить кофе | 2022 | 8 | 2022-08-01 |
| 5 | 5 | Купить кофе | 2022 | 9 | 2022-09-01 |
| 6 | (NULL) | Убрать офис | (NULL) | (NULL) | (NULL) |
| 7 | 4 | Наслаждаться жизнью | (NULL) | (NULL) | (NULL) |
| 8 | 6 | Наслаждаться жизнью | (NULL) | (NULL) | (NULL) |
Как группировать задачи по году и месяцу я подсказывать не буду – ты это уже изучал: воспользуйся оператором GROUP BY.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ