sql >> Databasteknik >  >> RDS >> MariaDB

Hur WEEK() fungerar i MariaDB

I MariaDB, WEEK() är en inbyggd datum- och tidsfunktion som returnerar veckan från ett givet datumuttryck.

Den godtar två argument; datumet du vill extrahera veckan från, och ett valfritt lägesargument för att ange vilket läge som ska användas i resultatet.

Den returnerar veckan som ett tal i intervallet 0 till 53 eller 1 till 53 , beroende på vilket läge som används.

Syntax

Syntaxen ser ut så här:

WEEK(date[,mode]) 

Där date är datumuttrycket att hämta veckan från, och mode är ett valfritt argument som låter dig ange ett läge att använda.

Lägen

Det valfria mode argumentet bestämmer om veckan börjar på söndag eller måndag och om returvärdet ska ligga inom intervallet 0 till 53 eller från 1 till 53 .

Modeargumentet kan vara något av följande:

Läge första veckodagen Räckvidd Vecka 1 är den första veckan med...
0 Söndag 0-53 en söndag i år
1 måndag 0-53 mer än tre dagar i år
2 Söndag 1-53 en söndag i år
3 måndag 1-53 mer än 3 dagar i år
(i enlighet med ISO 8601:1988)
4 Söndag 0-53 mer än tre dagar i år
5 måndag 0-53 en måndag i år
6 Söndag 1-53 mer än tre dagar i år
7 måndag 1-53 en måndag i år

Om modargumentet utelämnas, värdet för default_week_format systemvariabel används.

Låt oss kontrollera värdet på mitt default_week_format systemvariabel:

SELECT @@default_week_format; 

Resultat:

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

Nu, när jag kör WEEK() utan att ange ett läge kommer den att använda läge 0 .

Exempel

Här är ett exempel på hur du anropar WEEK() utan att ange läget:

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

Resultat:

+----------------------------+| VECKAN('2030-01-01') |+------------------------+| 0 |+---------------------------+

Ange ett läge

Här är ett exempel på hur du anger läget:

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

Resultat:

+------------------------------+| VECKA('2030-01-01', 1) |+-----------------------------+| 1 |+------------------------------+

Den här gången är resultatet 1 istället för 0 .

Låt oss gå igenom alla lägen för samma 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); 

Resultat (med vertikal utdata):

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

Datetime-värden

WEEK() Funktionen fungerar även med datetime-värden:

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

Resultat:

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

Numeriska datum

Det är också möjligt att skicka datum som ett nummer, så länge det är vettigt som ett datum.

Exempel

SELECT WEEK(20301125); 

Resultat:

+----------------+| VECKA(20301125) |+----------------+| 47 |+----------------+

Eller till och med följande (som använder ett tvåsiffrigt år):

SELECT WEEK(301125); 

Resultat:

+--------------+| VECKA(301125) |+--------------+| 47 |+--------------------+

Men det måste vara vettigt som en dejt. Så här händer om jag ökar dagdelen till en ogiltig dag:

SELECT WEEK(20301135); 

Resultat:

+----------------+| VECKA(20301135) |+----------------+| NULL |+----------------+1 rad i set, 1 varning (0,001 sek)

Den returnerade null med en varning.

Låt oss titta på varningen:

SHOW WARNINGS; 

Resultat:

+--------+------+------------------------------------ ----------+| Nivå | Kod | Meddelande |+--------+------+-------------------------------------- --------+| Varning | 1292 | Felaktigt datetime-värde:'20301135' |+--------+------+------------------------ --------------+

Andra avgränsare

Du kan använda andra avgränsare för datumet. MariaDB är ganska förlåtande när det kommer till avgränsare på datum. Här är några giltiga exempel:

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

Resultat (med vertikal utdata):

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

Aktuellt datum

Vi kan skicka NOW() som datetime-argument för att använda det aktuella datumet:

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

Resultat:

+----------------------------+-------------+| NU() | VECKA(NU()) |+---------------------+------------+| 2021-05-17 08:36:12 | 20 |+----------------------+-------------+

Ogiltiga argument

När ett ogiltigt argument skickades, WEEK() returnerar null :

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

Resultat:

+----------------------------+| VECKA('2030-65-78') |+------------------------+| NULL |+--------------------+1 rad i set, 1 varning (0,000 sek)

Låt oss visa varningen:

SHOW WARNINGS; 

Resultat:

+--------+------+------------------------------------ -----------+| Nivå | Kod | Meddelande |+--------+------+-------------------------------------- ----------+| Varning | 1292 | Felaktigt datetime-värde:'2030-65-78' |+---------+------+-------------------- --------------------+

Argument saknas

Anropar WEEK() med fel antal argument, eller utan att skicka några argument, resulterar i ett fel:

SELECT WEEK(); 

Resultat:

ERROR 1064 (42000):Du har ett fel i din SQL-syntax; kontrollera manualen som motsvarar din MariaDB-serverversion för rätt syntax att använda nära ')' på rad 1

Och ett annat exempel:

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

Resultat:

ERROR 1064 (42000):Du har ett fel i din SQL-syntax; kontrollera manualen som motsvarar din MariaDB-serverversion för rätt syntax att använda nära '2)' på rad 1

  1. Hur man skapar en DB-länk mellan två orakelinstanser

  2. MariaDB JSON_INSERT() Förklarad

  3. Vad är nytt i MariaDB 10.4

  4. SQL Server Error 113:Saknar slutkommentarmärke '*/'