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
.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ