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