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.

undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 2 лекция
Недоступна
task0417
Напиши запрос, который вернет текущую дату и текущее время.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 2 лекция
Недоступна
task0418
Напиши запрос, который вернет текущую дату и время 2 раза. Используй две разные функции.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 2 лекция
Недоступна
task0419
Напиши запрос, который вернет год, месяц, день и день месяца текущей даты.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 2 лекция
Недоступна
task0420
Напиши запрос, который вернет часы, минуты и секунды текущего времени.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 2 лекция
Недоступна
task0421
Напиши запрос, который вернет текущую дату (без времени), а также дату и время через 3 дня и 3 дня назад. Используй функции добавления и вычитания для дат и INTERVAL.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 2 лекция
Недоступна
task0422
Напиши запрос, который вернет текущую дату со временем, а также дату и время с добавлением null секунд и 33 секунды. Используй функцию добавления времени.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 2 лекция
Недоступна
task0423
Напиши запрос, который из таблицы employee выберет имя (name) и позицию (position) сотрудников, которые родились в понедельник. Используй DAYNAME().
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 2 лекция
Недоступна
Рожденные в первой 200ке
Напиши запрос, который из таблицы employee выберет имя (name) и департамент (department) сотрудников, которые родились в первые 200 дней года.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 2 лекция
Недоступна
task0425
Напиши запрос, который из таблицы employee выберет год, месяц согласно даты рождения (date_of_birth) и количество сотрудников, которые родились в этот год и месяц.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 2 лекция
Недоступна
task0426
Напиши запрос, который из таблицы data выберет год, месяц, день из поля date и общую сумму значений из поля total, которые относятся к данному году, месяцу и дню.