В MariaDB, YEARWEEK()
е вградена функция за дата и час, която връща годината и седмицата за дадена дата.
Приема два аргумента; датата, от която искате да извлечете годината и седмицата, и незадължителен аргумент за режим, за да посочите режима, който да се използва в резултата.
Връща седмицата като число в диапазона 0
до 53
или 1
до 53
, в зависимост от използвания режим. Освен това годината в резултата може да е различна от годината в аргумента за дата за първата и последната седмица от годината.
Синтаксис
Синтаксисът е така:
YEARWEEK(date), YEARWEEK(date,mode)
Което също може да се изрази така:
YEARWEEK(date[,mode])
Където date
е изразът за дата, от който да получите годината и седмицата и mode
е незадължителен аргумент, който ви позволява да посочите режим, който да използвате.
Режими
Незадължителният mode
аргумент определя дали седмицата започва в неделя или понеделник и дали връщаната стойност трябва да бъде в диапазона от 0
до 53
или от 1
до 53
.
Аргументът mode може да бъде някой от следните:
Режим | 1-ви ден от седмицата | Обхват | Първата седмица е първата седмица с... |
---|---|---|---|
0 | Неделя | 0-53 | една неделя през тази година |
1 | Понеделник | 0-53 | повече от 3 дни тази година |
2 | Неделя | 1-53 | една неделя през тази година |
3 | Понеделник | 1-53 | повече от 3 дни тази година (в съответствие с ISO 8601:1988) |
4 | Неделя | 0-53 | повече от 3 дни тази година |
5 | Понеделник | 0-53 | понеделник през тази година |
6 | Неделя | 1-53 | повече от 3 дни тази година |
7 | Понеделник | 1-53 | понеделник през тази година |
Ако аргументът mode е пропуснат, стойността на default_week_format
се използва системна променлива.
Нека проверим стойността на моя default_week_format
системна променлива:
SELECT @@default_week_format;
Резултат:
<пред>+-----------------------+| @@default_week_format |+-----------------------+| 0 |+-----------------------+
Сега, когато стартирам YEARWEEK()
без да посочва режим, той ще използва режим 0
.
Пример
Ето пример за извикване на YEARWEEK()
без да посочите режима:
SELECT YEARWEEK('2030-01-01');
Резултат:
+-----------------------+| YEARWEEK('2030-01-01') |+------------------------+| 202952 |+------------------------+
В този случай получените година и седмица са от предходната година.
Посочете режим
Ето пример за определяне на режима:
SELECT YEARWEEK('2030-01-01', 1);
Резултат:
+---------------------+| YEARWEEK('2030-01-01', 1) |+---------------------------+| 203001 |+--------------------------+
Този път резултатът е различен.
Нека преминем през всички режими за една и съща дата:
SELECT
YEARWEEK('2030-01-01', 0),
YEARWEEK('2030-01-01', 1),
YEARWEEK('2030-01-01', 2),
YEARWEEK('2030-01-01', 3),
YEARWEEK('2030-01-01', 4),
YEARWEEK('2030-01-01', 5),
YEARWEEK('2030-01-01', 6),
YEARWEEK('2030-01-01', 7);
Резултат (с помощта на вертикален изход):
YEARWEEK('2030-01-01', 0):202952YEARWEEK('2030-01-01', 1):203001YEARWEEK('2030-01-01', 2):202952YEARWEEK('1-2010) ', 3):203001YEARWEEK('2030-01-01', 4):203001YEARWEEK('2030-01-01', 5):202953YEARWEEK('2030-01-01', 6):2030 WEEK-12 -01', 7):202953
Стойности за дата и час
YEARWEEK()
функцията също работи със стойности за дата и час:
SELECT YEARWEEK('2030-08-01 10:30:45');
Резултат:
+--------------------------------+| YEARWEEK('2030-08-01 10:30:45') |+-------------------------------- +| 203030 |+---------------------------------+
Числови дати
Възможно е също да предавате дати като число, стига да има смисъл като дата.
Пример
SELECT YEARWEEK(20301125);
Резултат:
+-------------------+| ГОДИНА СЕДМИЦА(20301125) |+-------------------+| 203047 |+-------------------+
Или дори следното (което използва двуцифрена година):
SELECT YEARWEEK(301125);
Резултат:
+-----------------+| ГОДИНА СЕДМИЦА(301125) |+------------------+| 203047 |+------------------+
Но трябва да има смисъл като среща. Ето какво се случва, ако увелича частта от деня до невалиден ден:
SELECT YEARWEEK(20301135);
Резултат:
+-------------------+| ГОДИНА СЕДМИЦА(20301135) |+-------------------+| NULL |+-------------------+1 ред в комплект, 1 предупреждение (0,000 сек)
Върна null
с предупреждение.
Нека разгледаме предупреждението:
SHOW WARNINGS;
Резултат:
+--------+------+---------------------------- ---------+| Ниво | Код | Съобщение |+---------+------+------------------------------ --------+| Предупреждение | 1292 | Неправилна стойност за дата и час:'20301135' |+--------+------+------------------------ --------------+
Други ограничители
Можете да използвате други разделители за датата. MariaDB е доста прощаваща, когато става въпрос за разделители на дати. Ето няколко валидни примера:
SELECT
YEARWEEK('2030/06/25'),
YEARWEEK('2030,06,25'),
YEARWEEK('2030:06:25'),
YEARWEEK('2030;06!25');
Резултат (с помощта на вертикален изход):
YEARWEEK('2030/06/25'):203025YEARWEEK('2030,06,25'):203025YEARWEEK('2030:06:25'):203025YEARWEEK('2030;06,06,25'):203025YEARWEEK('2030;06!25'):предварително>Текуща дата
Можем да предадем
NOW()
като аргумент datetime, за да използвате текущата дата:SELECT NOW(), YEARWEEK(NOW());
Резултат:
<пред>+---------------------+----------------+| СЕГА() | ГОДИНА (СЕГА()) |+---------------------+----------------+| 2021-05-17 09:08:23 | 202120 |+---------------------+----------------+
Невалидни аргументи
Когато се подаде невалиден аргумент, YEARWEEK()
връща null
:
SELECT YEARWEEK('2030-65-78');
Резултат:
+-----------------------+| YEARWEEK('2030-65-78') |+-----------------------+| NULL |+-----------------------+1 ред в комплект, 1 предупреждение (0,000 сек)
Нека покажем предупреждението:
SHOW WARNINGS;
Резултат:
+--------+------+---------------------------- -----------+| Ниво | Код | Съобщение |+---------+------+------------------------------ ----------+| Предупреждение | 1292 | Неправилна стойност за дата и час:'2030-65-78' |+---------+------+------------------- --------------------+
Липсващ аргумент
Извикване на YEARWEEK()
с грешен брой аргументи или без подаване на аргументи, води до грешка:
SELECT YEARWEEK();
Резултат:
ГРЕШКА 1582 (42000):Неправилен брой на параметрите в извикването на естествената функция „YEARWEEK“
И още един пример:
SELECT YEARWEEK('2030-12-10', 1, 2);
Резултат:
ГРЕШКА 1582 (42000):Неправилен брой на параметрите в извикването на естествената функция „YEARWEEK“