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() Повертає номер дня тижня: Неділя — 1, Понеділок — 2
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

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. Групуємо дані за роком та місяцем

Давай згадаємо нашу таблицю 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.