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