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