Последнее обновление
YEARWEEK
Описание
Функция YEARWEEK возвращает сочетание «год + номер недели» для указанной даты (формат YYYYWW, например, 202301 обозначает 1-ю неделю 2023 года). Необязательный параметр mode позволяет гибко задавать первый день недели и правило определения «первой недели». По умолчанию используется mode=0.
Номера недель находятся в диапазоне 1-53 в зависимости от настройки mode.
Влияние параметра mode показано в таблице ниже:
| Режим | Первый день недели | Диапазон номеров недель | Определение первой недели |
|---|---|---|---|
| 0 | Воскресенье | 1-53 | Неделя, содержащая первое воскресенье года |
| 1 | Понедельник | 1-53 | Первая неделя, в которой не менее 4 дней относятся к этому году |
| 2 | Воскресенье | 1-53 | Неделя, содержащая первое воскресенье года |
| 3 | Понедельник | 1-53 | Первая неделя, в которой не менее 4 дней относятся к этому году |
| 4 | Воскресенье | 1-53 | Первая неделя, в которой не менее 4 дней относятся к этому году |
| 5 | Понедельник | 1-53 | Неделя, содержащая первый понедельник года |
| 6 | Воскресенье | 1-53 | Первая неделя, в которой не менее 4 дней относятся к этому году |
| 7 | Понедельник | 1-53 | Неделя, содержащая первый понедельник года |
Поведение этой функции соответствует функции yearweek в MySQL.
Синтаксис
YEARWEEK(`<date_or_time_expr>`[, mode])
Возвращаемое значение
Возвращает целое число типа INT в формате YYYYWW (первые 4 цифры обозначают год, последние 2 цифры обозначают номер недели), например, 202305 обозначает 5-ю неделю 2023 года, а 202052 обозначает 52-ю неделю 2020 года.
- Если неделя, содержащая указанную дату, относится к предыдущему году, возвращает предыдущий год и номер недели (например, для 1 января 2021 года может возвращаться 202052).
- Если неделя, содержащая указанную дату, относится к следующему году, возвращает следующий год и номер недели 1 (например, для 30 декабря 2024 года может возвращаться 202501).
- Если входное значение равно NULL, возвращает NULL.
Примеры
-- Default mode=0 (Sunday start, first week contains first Sunday)
-- 2021-01-01 is Friday, the first Sunday of the week is 2020-12-27, so it belongs to week 52 of 2020
SELECT YEARWEEK('2021-01-01') AS yearweek_mode0;
+----------------+
| yearweek_mode0 |
+----------------+
| 202052 |
+----------------+
-- mode=1 (Monday start, 4-day rule, consistent with WEEKOFYEAR)
SELECT YEARWEEK('2020-07-01', 1) AS yearweek_mode1;
+----------------+
| yearweek_mode1 |
+----------------+
| 202027 |
+----------------+
-- mode=1, cross-year week (2024-12-30 is Monday, the week has ≥4 days in 2025, belongs to week 1 of 2025)
SELECT YEARWEEK('2024-12-30', 1) AS cross_year_mode1;
+------------------+
| cross_year_mode1 |
+------------------+
| 202501 |
+------------------+
-- mode=5 (Monday start, first week contains first Monday)
-- 2023-01-02 is Monday (first Monday of the year), the week is week 1 of 2023
SELECT YEARWEEK('2023-01-02', 5) AS yearweek_mode5;
+----------------+
| yearweek_mode5 |
+----------------+
| 202301 |
+----------------+
-- Input DATE type
SELECT YEARWEEK('2023-12-25', 1) AS date_type_mode1;
+------------------+
| date_type_mode1 |
+------------------+
| 202352 |
+------------------+
-- Input NULL (returns NULL)
SELECT YEARWEEK(NULL) AS null_input;
+------------+
| null_input |
+------------+
| NULL |
+------------+