sql >> Databasteknik >  >> RDS >> MariaDB

Hur YEARWEEK() fungerar i MariaDB

I MariaDB, YEARWEEK() är en inbyggd datum- och tidsfunktion som returnerar år och vecka för ett givet datum.

Den godtar två argument; datumet du vill extrahera år och vecka 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. Året i resultatet kan också skilja sig från året i datumargumentet för årets första och sista vecka.

Syntax

Syntaxen ser ut så här:

YEARWEEK(date), YEARWEEK(date,mode) 

Vilket också skulle kunna uttryckas så här:

YEARWEEK(date[,mode]) 

Där date är datumuttrycket att hämta år och vecka 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 YEARWEEK() utan att ange ett läge kommer den att använda läge 0 .

Exempel

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

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

Resultat:

+------------------------+| ÅRSVECKAN('2030-01-01') |+------------------------+| 202952 |+------------------------+

I det här fallet är det resulterande året och veckan från föregående år.

Ange ett läge

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

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

Resultat:

+--------------------------------+| ÅRSVECKA('2030-01-01', 1) |+--------------------------------+| 203001 |+-----------------------------------+

Den här gången är resultatet ett annat.

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

Resultat (med vertikal utdata):

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

Datetime-värden

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

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

Resultat:

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

Numeriska datum

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

Exempel

SELECT YEARWEEK(20301125); 

Resultat:

+----------------------------+| ÅRSVECKA(20301125) |+---------------------+| 203047 |+---------------------+

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

SELECT YEARWEEK(301125); 

Resultat:

+------------------------+| ÅRSVECKAN(301125) |+------------------------+| 203047 |+------------------------+

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

SELECT YEARWEEK(20301135); 

Resultat:

+----------------------------+| ÅRSVECKAN(20301135) |+------------------------+| NULL |+--------------------+1 rad i set, 1 varning (0,000 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 
    YEARWEEK('2030/06/25'),
    YEARWEEK('2030,06,25'),
    YEARWEEK('2030:06:25'),
    YEARWEEK('2030;06!25'); 

Resultat (med vertikal utdata):

YEARWEEK('2030/06/25'):203025YEARWEEK('2030,06,25'):203025YEARWEEK('2030:06:25'):203025YEARWEEK('2030;02!035'):

före>

Aktuellt datum

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

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

Resultat:

+----------------------------+----------------+| NU() | ÅRSVECKA(NU()) |+----------------------------+----------------+| 2021-05-17 09:08:23 | 202120 |+---------------------+------------------------+

Ogiltiga argument

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

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

Resultat:

+------------------------+| ÅRSVECKAN('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 YEARWEEK() med fel antal argument, eller utan att skicka några argument, resulterar i ett fel:

SELECT YEARWEEK(); 

Resultat:

ERROR 1582 (42000):Fel parameterantal i anropet till den ursprungliga funktionen 'YEARWEEK'

Och ett annat exempel:

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

Resultat:

ERROR 1582 (42000):Fel parameterantal i anropet till den ursprungliga funktionen 'YEARWEEK'

  1. Ladda CSV-data till MySQL i Python

  2. Lägg till Ordinal Indicator till ett datum i PostgreSQL

  3. Betydelsen av Oracles dump(systimestamp) bytes

  4. PostgreSQL 9.1:Hur man sammanfogar rader i array utan dubbletter, GÅ MED i en annan tabell