В 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 | +--------+--------+--------+--------+--------+--------+--------+--------+