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

Jak funguje WEEK() v MariaDB

V MariaDB WEEK() je vestavěná funkce data a času, která vrací týden z daného výrazu data.

Přijímá dva argumenty; datum, ze kterého chcete extrahovat 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.

Syntaxe

Syntaxe vypadá takto:

WEEK(date[,mode]) 

Kde date je výraz data, ze kterého se získá 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 návratová 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 argument mode vynechán, 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 WEEK() bez určení režimu použije režim 0 .

Příklad

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

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

Výsledek:

+---------------------+| TÝDEN('2030-01-01') |+---------------------+| 0 |+--------------------+

Určete režim

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

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

Výsledek:

+-----------------------+| TÝDEN('2030-01-01', 1) |+------------------------+| 1 |+-----------------------+

Tentokrát je výsledek 1 místo 0 .

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

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

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

WEEK('2030-01-01', 0):0WEEK('2030-01-01', 1):1WEEK('2030-01-01', 2):52WEEK('2030-01-01 ', 3):1WEEK('2030-01-01', 4):1WEEK('2030-01-01', 5):0WEEK('2030-01-01', 6):1WEEK('2030-01 -01', 7):53

Hodnoty data a času

WEEK() funkce také pracuje s hodnotami datetime:

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

Výsledek:

+-----------------------------+| TÝDEN('2030-08-01 10:30:45') |+-----------------------------+| 30 |+-----------------------------+

Číselná data

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

Příklad

SELECT WEEK(20301125); 

Výsledek:

+-----------------+| TÝDEN(20301125) |+----------------+| 47 |+----------------+

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

SELECT WEEK(301125); 

Výsledek:

+---------------+| TÝDEN(301125) |+---------------+| 47 |+--------------+

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

SELECT WEEK(20301135); 

Výsledek:

+-----------------+| TÝDEN(20301135) |+----------------+| NULL |+----------------+1 řádek v sadě, 1 upozornění (0,001 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 
    WEEK('2030/06/25'),
    WEEK('2030,06,25'),
    WEEK('2030:06:25'),
    WEEK('2030;06!25'); 

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

WEEK('2030/06/25'):25WEEK('2030,06,25'):25WEEK('2030:06:25'):25WEEK('2030;06!25'):25 

Aktuální datum

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

SELECT 
    NOW(),
    WEEK(NOW()); 

Výsledek:

+---------------------+-------------+| NYNÍ() | TÝDEN(NYNÍ()) |+---------------------+-------------+| 2021-05-17 08:36:12 | 20 |+---------------------+-------------+

Neplatné argumenty

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

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

Výsledek:

+---------------------+| TÝDEN('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í WEEK() s nesprávným počtem argumentů nebo bez předání jakýchkoli argumentů vede k chybě:

SELECT WEEK(); 

Výsledek:

ERROR 1064 (42000):Máte chybu v syntaxi SQL; podívejte se do manuálu, který odpovídá verzi vašeho serveru MariaDB, kde najdete správnou syntaxi blízko ')' na řádku 1

A další příklad:

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

Výsledek:

ERROR 1064 (42000):Máte chybu v syntaxi SQL; podívejte se do manuálu, který odpovídá verzi vašeho serveru MariaDB, kde najdete správnou syntaxi, která se má použít poblíž '2)' na řádku 1

  1. Volání funkce pl/sql v Javě?

  2. Jak stáhnout Postgres bytea sloupec jako soubor

  3. Jak CHAR() funguje v MariaDB

  4. MySQLSyntaxErrorException blízko ? při pokusu o provedení PreparedStatement