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

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

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 20 съвета:Подгответе вашата база данни за Черен петък и Кибер понеделник

  2. Използване на MariaDB Audit Plugin за сигурност на базата данни

  3. Сравняване на MariaDB Enterprise Backup с ClusterControl Backup Management

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

  5. ClusterControl 1.5 - Автоматична проверка на архивиране, изграждане на подчинен от архивиране и интеграция в облак