sql >> Databáze >  >> RDS >> MariaDB

Jak funguje YEARWEEK() v MariaDB

V MariaDB, YEARWEEK() je vestavěná funkce data a času, která vrací rok a týden pro dané datum.

Přijímá dva argumenty; datum, ze kterého chcete extrahovat rok a týden, a volitelný argument režimu pro určení režimu, který se má ve výsledku použít.

Vrátí týden jako číslo v rozsahu 053 nebo 153 , v závislosti na používaném režimu. Rok ve výsledku se také může lišit od roku v argumentu data pro první a poslední týden roku.

Syntaxe

Syntaxe vypadá takto:

YEARWEEK(date), YEARWEEK(date,mode) 

Což by se dalo vyjádřit i takto:

YEARWEEK(date[,mode]) 

Kde date je výraz data, ze kterého se získá rok a týden, a mode je volitelný argument, který vám umožňuje určit režim, který se má použít.

Režimy

Volitelný mode argument určuje, zda týden začíná v neděli nebo pondělí a zda má být vrácená hodnota v rozsahu od 053 nebo od 153 .

Argument režimu může být kterýkoli z následujících:

Režim 1. den v týdnu Rozsah Týden 1 je 1. týden s…
0 Neděle 0–53 neděle v tomto roce
1 pondělí 0–53 více než 3 dny v tomto roce
2 Neděle 1-53 neděle v tomto roce
3 pondělí 1-53 více než 3 dny v tomto roce
(v souladu s ISO 8601:1988)
4 Neděle 0–53 více než 3 dny v tomto roce
5 pondělí 0–53 pondělí v tomto roce
6 Neděle 1-53 více než 3 dny v tomto roce
7 pondělí 1-53 pondělí v tomto roce

Pokud je vynechán argument mode, hodnota default_week_format je použita systémová proměnná.

Pojďme zkontrolovat hodnotu mého default_week_format systémová proměnná:

SELECT @@default_week_format; 

Výsledek:

+-----------------------+| @@default_week_format |+-----------------------+| 0 |+-----------------------+

Nyní, když spustím YEARWEEK() bez určení režimu použije režim 0 .

Příklad

Zde je příklad volání YEARWEEK() bez určení režimu:

SELECT YEARWEEK('2030-01-01'); 

Výsledek:

+------------------------+| YEARWEEK('2030-01-01') |+-------------------------+| 202952 |+------------------------+

V tomto případě jsou výsledný rok a týden z předchozího roku.

Určete režim

Zde je příklad určení režimu:

SELECT YEARWEEK('2030-01-01', 1); 

Výsledek:

+---------------------------+| YEARWEEK('2030-01-01', 1) |+---------------------------+| 203001 |+---------------------------+

Tentokrát je výsledek jiný.

Pojďme si projít všechny režimy pro stejné datum:

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); 

Výsledek (při použití vertikálního výstupu):

YEARWEEK('2030-01-01', 0):202952YEARWEEK('2030-01-01', 1):203001YEARWEEK('2030-01-01', 2):202952YEARWEEK('1-2030 ', 3):203001YEARWEEK('2030-01-01', 4):203001YEARWEEK('2030-01-01', 5):202953YEARWEEK('2030-01-01', 6):2030-00203 203001 -01', 7):202953

Hodnoty data a času

YEARWEEK() funkce také pracuje s hodnotami datetime:

SELECT YEARWEEK('2030-08-01 10:30:45'); 

Výsledek:

+---------------------------------+| YEARWEEK('2030-08-01 10:30:45') |+---------------------------------- +| 203030 |+---------------------------------+

Číselná data

Je také možné předávat data jako číslo, pokud to dává smysl jako datum.

Příklad

SELECT YEARWEEK(20301125); 

Výsledek:

+---------------------+| YEARWEEK(20301125) |+--------------------+| 203047 |+--------------------+

Nebo dokonce následující (který používá dvouciferný rok):

SELECT YEARWEEK(301125); 

Výsledek:

+-------------------+| YEARWEEK(301125) |+------------------+| 203047 |+------------------+

Ale jako rande to musí dávat smysl. Když zvětším část dne na neplatný den, stane se toto:

SELECT YEARWEEK(20301135); 

Výsledek:

+---------------------+| YEARWEEK(20301135) |+--------------------+| NULL |+--------------------+1 řádek v sadě, 1 upozornění (0,000 s)

Vrátil null s varováním.

Podívejme se na varování:

SHOW WARNINGS; 

Výsledek:

+---------+------+----------------------------- ---------+| Úroveň | Kód | Zpráva |+---------+------+------------------------------ --------+| Upozornění | 1292 | Nesprávná hodnota data a času:'20301135' |+---------+------+------------------------- --------------+

Další oddělovače

Pro datum můžete použít jiné oddělovače. MariaDB je docela shovívavá, pokud jde o oddělovače dat. Zde je několik platných příkladů:

SELECT 
    YEARWEEK('2030/06/25'),
    YEARWEEK('2030,06,25'),
    YEARWEEK('2030:06:25'),
    YEARWEEK('2030;06!25'); 

Výsledek (při použití vertikálního výstupu):

YEARWEEK('2030/06/25'):203025YEARWEEK('2030,06,25'):203025YEARWEEK('2030:06:25'):203025YEARWEEK('2030;06!25'):203025YEARWEEK('2030:06:25'):před> 

Aktuální datum

Můžeme předat NOW() jako argument datetime pro použití aktuálního data:

SELECT 
    NOW(),
    YEARWEEK(NOW()); 

Výsledek:

+---------------------+-----------------+| NYNÍ() | ROK TÝDEN(NYNÍ()) |+---------------------+-----------------+| 2021-05-17 09:08:23 | 202120 |+---------------------+-----------------+

Neplatné argumenty

Při předání neplatného argumentu YEARWEEK() vrátí null :

SELECT YEARWEEK('2030-65-78'); 

Výsledek:

+------------------------+| YEARWEEK('2030-65-78') |+-------------------------+| NULL |+------------------------+1 řádek v sadě, 1 upozornění (0,000 s)

Ukažme varování:

SHOW WARNINGS; 

Výsledek:

+---------+------+----------------------------- -----------+| Úroveň | Kód | Zpráva |+---------+------+------------------------------ ----------+| Upozornění | 1292 | Nesprávná hodnota data a času:'2030-65-78' |+---------+------+--------------------- --------------------+

Chybí argument

Volání YEARWEEK() s nesprávným počtem argumentů nebo bez předání jakýchkoli argumentů vede k chybě:

SELECT YEARWEEK(); 

Výsledek:

CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'YEARWEEK'

A další příklad:

SELECT YEARWEEK('2030-12-10', 1, 2); 

Výsledek:

CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'YEARWEEK'

  1. Jak změnit uživatelské heslo v PostgreSQL

  2. Jednoduchá uvozovka, dvojitá uvozovka a zpětné zaškrtnutí v dotazech MySQL

  3. Jak získat záznamy z posledních 24 hodin v MySQL

  4. Jiná db pro testování v Django?