В 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