В MariaDB, WEEK()
е вградена функция за дата и час, която връща седмицата от даден израз за дата.
Приема два аргумента; датата, от която искате да извлечете седмицата, и незадължителен аргумент за режим, за да посочите режима, който да се използва в резултата.
Връща седмицата като число в диапазона 0
до 53
или 1
до 53
, в зависимост от използвания режим.
Синтаксис
Синтаксисът е така:
WEEK(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 |+-----------------------+
Сега, когато стартирам WEEK()
без да посочва режим, той ще използва режим 0
.
Пример
Ето пример за извикване на WEEK()
без да посочите режима:
SELECT WEEK('2030-01-01');
Резултат:
+-------------------+| WEEK('2030-01-01') |+-------------------+| 0 |+-------------------+
Посочете режим
Ето пример за определяне на режима:
SELECT WEEK('2030-01-01', 1);
Резултат:
<пред>+-----------------------+| WEEK('2030-01-01', 1) |+-----------------------+| 1 |+-----------------------+
Този път резултатът е 1
вместо 0
.
Нека преминем през всички режими за една и съща дата:
SELECT
WEEK('2030-01-01', 0),
WEEK('2030-01-01', 1),
WEEK('2030-01-01', 2),
WEEK('2030-01-01', 3),
WEEK('2030-01-01', 4),
WEEK('2030-01-01', 5),
WEEK('2030-01-01', 6),
WEEK('2030-01-01', 7);
Резултат (с помощта на вертикален изход):
WEEK('2030-01-01', 0):0WEEK('2030-01-01', 1):1WEEK('2030-01-01', 2):52WEEK('2030-01-01 ', 3):1 WEEK('2030-01-01', 4):1 WEEK('2030-01-01', 5):0WEEK('2030-01-01', 6):1 WEEK('2030-01 -01', 7):53
Стойности за дата и час
WEEK()
функцията също работи със стойности за дата и час:
SELECT WEEK('2030-08-01 10:30:45');
Резултат:
+----------------------------+| WEEK('2030-08-01 10:30:45') |+----------------------------+| 30 |+-----------------------------+
Числови дати
Възможно е също да предавате дати като число, стига да има смисъл като дата.
Пример
SELECT WEEK(20301125);
Резултат:
+----------------+| СЕДМИЦА(20301125) |+----------------+| 47 |+----------------+
Или дори следното (което използва двуцифрена година):
SELECT WEEK(301125);
Резултат:
+--------------+| СЕДМИЦА(301125) |+--------------+| 47 |+--------------+
Но трябва да има смисъл като среща. Ето какво се случва, ако увелича частта от деня до невалиден ден:
SELECT WEEK(20301135);
Резултат:
+----------------+| СЕДМИЦА(20301135) |+----------------+| NULL |+----------------+1 ред в комплект, 1 предупреждение (0,001 сек)
Върна null
с предупреждение.
Нека разгледаме предупреждението:
SHOW WARNINGS;
Резултат:
+--------+------+---------------------------- ---------+| Ниво | Код | Съобщение |+--------+------+------------------------------ --------+| Предупреждение | 1292 | Неправилна стойност за дата и час:'20301135' |+--------+------+------------------------ --------------+
Други ограничители
Можете да използвате други разделители за датата. MariaDB е доста прощаваща, когато става въпрос за разделители на дати. Ето няколко валидни примера:
SELECT
WEEK('2030/06/25'),
WEEK('2030,06,25'),
WEEK('2030:06:25'),
WEEK('2030;06!25');
Резултат (с помощта на вертикален изход):
WEEK('2030/06/25'):25WEEK('2030,06,25'):25WEEK('2030:06:25'):25WEEK('2030;06!25'):25предварително>Текуща дата
Можем да предадем
NOW()
като аргумент datetime, за да използвате текущата дата:SELECT NOW(), WEEK(NOW());
Резултат:
<пред>+---------------------+------------+| СЕГА() | СЕДМИЦА(СЕГА()) |+---------------------+------------+| 2021-05-17 08:36:12 | 20 |+---------------------+------------+
Невалидни аргументи
Когато се подаде невалиден аргумент, WEEK()
връща null
:
SELECT WEEK('2030-65-78');
Резултат:
+-------------------+| WEEK('2030-65-78') |+-------------------+| NULL |+-------------------+1 ред в комплект, 1 предупреждение (0,000 сек)
Нека покажем предупреждението:
SHOW WARNINGS;
Резултат:
+--------+------+---------------------------- -----------+| Ниво | Код | Съобщение |+--------+------+------------------------------ ----------+| Предупреждение | 1292 | Неправилна стойност за дата и час:'2030-65-78' |+---------+------+------------------- --------------------+
Липсващ аргумент
Извикване на WEEK()
с грешен брой аргументи или без подаване на аргументи, води до грешка:
SELECT WEEK();
Резултат:
ГРЕШКА 1064 (42000):Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на вашата версия на сървъра на MariaDB за правилния синтаксис, който да използвате близо до ')' на ред 1
И още един пример:
SELECT WEEK('2030-12-10', 1, 2);
Резултат:
ГРЕШКА 1064 (42000):Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на вашата версия на сървъра на MariaDB за правилния синтаксис, който да използвате близо до „2)“ на ред 1