В MySQL, YEARWEEK() функцията връща годината и седмицата за дадена дата. Предоставяте датата като аргумент и функцията ще върне съответно резултата.
Освен това имате възможност да укажете дали седмицата да започне в неделя или понеделник и дали седмицата трябва да бъде в диапазона от 0 до 53 или от 1 до 53.
Синтаксис
Можете да използвате една от следните две форми:
YEARWEEK(date) YEARWEEK(date,mode)
Къде:
dateе датата, от която искате да се върне номерът на годината и седмицата.modeе число, което определя дали седмицата трябва да започне в неделя или понеделник и дали седмицата трябва да бъде в диапазона от 0 до 53 или от 1 до 53. Вижте таблицата по-долу за възможните стойности на режима.
Ако не е посочен режим, режимът е 0 .
Пример 1 – Основна употреба
Ето пример за демонстрация.
SELECT YEARWEEK('2021-01-25') As 'Result';
Резултат:
+--------+ | Result | +--------+ | 202104 | +--------+
Ето пример с различна дата.
SELECT YEARWEEK('1999-12-25') As 'Result';
Резултат:
+--------+ | Result | +--------+ | 199951 | +--------+
Пример 2 – Посочете режим
Ако не посочите втори аргумент, YEARWEEK() функцията използва 0 като режим.
Все пак имате възможност да предоставите втори аргумент, за да укажете кой режим да използвате. Пример:
SELECT YEARWEEK('2019-11-23', 7) AS 'Mode 7';
Резултат:
+--------+ | Mode 7 | +--------+ | 201946 | +--------+
Възможните стойности на режима са както следва.
| Режим | Първи ден от седмицата | Обхват | Седмица 1 е първата седмица... |
|---|---|---|---|
| 0 | Неделя | 0-53 | с неделя през тази година |
| 1 | Понеделник | 0-53 | с 4 или повече дни тази година |
| 2 | Неделя | 1-53 | с неделя през тази година |
| 3 | Понеделник | 1-53 | с 4 или повече дни тази година |
| 4 | Неделя | 0-53 | с 4 или повече дни тази година |
| 5 | Понеделник | 0-53 | с понеделник през тази година |
| 6 | Неделя | 1-53 | с 4 или повече дни тази година |
| 7 | Понеделник | 1-53 | с понеделник през тази година |
Това са същите стойности, които могат да се използват с WEEK() функция.
Една разлика между тези две функции е, че WEEK() функцията извлича режима си по подразбиране от default_week_format системна променлива (стойността по подразбиране на тази променлива е 0 ). YEARWEEK() от друга страна, игнорира тази настройка и използва 0 като стойност по подразбиране (независимо от default_week_format настройка).
Пример 3 – Сравнение на режими
Ето едно бързо сравнение как можете да получите различни резултати в зависимост от използвания режим.
Следващите три примера използват същия код, но с три различни дати. Тези дати са последователни – настъпват на 5, 6 и 7 януари. Както можете да видите, резултатите могат да бъдат доста различни в зависимост от точната дата и използвания режим.
Дата 1
SET @date = '2019-01-05'; SELECT YEARWEEK(@date, 0) AS 'Mode 0', YEARWEEK(@date, 1) AS 'Mode 1', YEARWEEK(@date, 2) AS 'Mode 2', YEARWEEK(@date, 3) AS 'Mode 3', YEARWEEK(@date, 4) AS 'Mode 4', YEARWEEK(@date, 5) AS 'Mode 5', YEARWEEK(@date, 6) AS 'Mode 6', YEARWEEK(@date, 7) AS 'Mode 7';
Резултат:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 201852 | 201901 | 201852 | 201901 | 201901 | 201853 | 201901 | 201853 | +--------+--------+--------+--------+--------+--------+--------+--------+
Дата 2
SET @date = '2019-01-06'; SELECT YEARWEEK(@date, 0) AS 'Mode 0', YEARWEEK(@date, 1) AS 'Mode 1', YEARWEEK(@date, 2) AS 'Mode 2', YEARWEEK(@date, 3) AS 'Mode 3', YEARWEEK(@date, 4) AS 'Mode 4', YEARWEEK(@date, 5) AS 'Mode 5', YEARWEEK(@date, 6) AS 'Mode 6', YEARWEEK(@date, 7) AS 'Mode 7';
Резултат:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 201901 | 201901 | 201901 | 201901 | 201902 | 201853 | 201902 | 201853 | +--------+--------+--------+--------+--------+--------+--------+--------+
Дата 3
SET @date = '2019-01-07'; SELECT YEARWEEK(@date, 0) AS 'Mode 0', YEARWEEK(@date, 1) AS 'Mode 1', YEARWEEK(@date, 2) AS 'Mode 2', YEARWEEK(@date, 3) AS 'Mode 3', YEARWEEK(@date, 4) AS 'Mode 4', YEARWEEK(@date, 5) AS 'Mode 5', YEARWEEK(@date, 6) AS 'Mode 6', YEARWEEK(@date, 7) AS 'Mode 7';
Резултат:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 201901 | 201902 | 201901 | 201902 | 201902 | 201901 | 201902 | 201901 | +--------+--------+--------+--------+--------+--------+--------+--------+