MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Как работи WEEK() в MariaDB

В 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB CONNECTION_ID() Обяснено

  2. Справяне с ненадеждни мрежи при изработване на HA решение за MySQL или MariaDB

  3. Четири неща, които не знаехте за Amazon Aurora

  4. Как ATAN2() работи в MariaDB

  5. Как MONTHNAME() работи в MariaDB