I MariaDB, YEARWEEK() er en indbygget dato- og tidsfunktion, der returnerer år og uge for en given dato.
Den accepterer to argumenter; den dato, du vil udtrække året og ugen fra, og et valgfrit tilstandsargument for at angive den tilstand, der skal bruges i resultatet.
Det returnerer ugen som et tal i området 0 til 53 eller 1 til 53 , afhængigt af den anvendte tilstand. Året i resultatet kan også være forskelligt fra året i datoargumentet for årets første og sidste uge.
Syntaks
Syntaksen ser sådan ud:
YEARWEEK(date), YEARWEEK(date,mode) Hvilket også kunne udtrykkes sådan:
YEARWEEK(date[,mode])
Hvor date er datoudtrykket, der skal hentes år og uge fra, og mode er et valgfrit argument, der lader dig angive en tilstand, der skal bruges.
Tilstande
Den valgfri mode argument bestemmer, om ugen starter søndag eller mandag, og om returværdien skal være i området fra 0 til 53 eller fra 1 til 53 .
Modusargumentet kan være et af følgende:
| Tilstand | 1. ugedag | Rækkevidde | Uge 1 er den 1. uge med... |
|---|---|---|---|
| 0 | søndag | 0-53 | en søndag i år |
| 1 | mandag | 0-53 | mere end 3 dage i år |
| 2 | søndag | 1-53 | en søndag i år |
| 3 | mandag | 1-53 | mere end 3 dage i år (i overensstemmelse med ISO 8601:1988) |
| 4 | søndag | 0-53 | mere end 3 dage i år |
| 5 | mandag | 0-53 | en mandag i år |
| 6 | søndag | 1-53 | mere end 3 dage i år |
| 7 | mandag | 1-53 | en mandag i år |
Hvis tilstandsargumentet udelades, værdien af default_week_format systemvariabel bruges.
Lad os tjekke værdien af mit default_week_format systemvariabel:
SELECT @@default_week_format; Resultat:
+------------------------------+| @@default_week_format |+-----------------------------+| 0 |+------------------------------+
Nu, når jeg kører YEARWEEK() uden at angive en tilstand, vil den bruge tilstanden 0 .
Eksempel
Her er et eksempel på at kalde YEARWEEK() uden at angive tilstanden:
SELECT YEARWEEK('2030-01-01'); Resultat:
+------------------------+| ÅR UGE('2030-01-01') |+------------------------+| 202952 |+------------------------+ I dette tilfælde er det resulterende år og uge fra det foregående år.
Angiv en tilstand
Her er et eksempel på angivelse af tilstanden:
SELECT YEARWEEK('2030-01-01', 1); Resultat:
+--------------------------------+| ÅR UGE('2030-01-01', 1) |+--------------------------------+| 203001 |+-----------------------------------+ Denne gang er resultatet anderledes.
Lad os gennemgå alle tilstande for den samme dato:
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 (ved hjælp af lodret output):
YEARWEEK('2030-01-01', 0):202952YEARWEEK('2030-01-01', 1):203001YEARWEEK('2030-01-01', 2):202952YEARWEEK('01-0100) ', 3):203001YEARWEEK('2030-01-01', 4):203001YEARWEEK('2030-01-01', 5):202953YEARWEEK('2030-01-01', 6):20300EK('01ÅR) -01', 7):202953 Dato-tidsværdier
YEARWEEK() funktion fungerer også med datetime-værdier:
SELECT YEARWEEK('2030-08-01 10:30:45'); Resultat:
+--------------------------------+| YEARWEEK('2030-08-01 10:30:45') |+---------------------------------------- +| 203030 |+----------------------------------------+ Numeriske datoer
Det er også muligt at videregive datoer som et tal, så længe det giver mening som en dato.
Eksempel
SELECT YEARWEEK(20301125); Resultat:
+---------------------------+| ÅR UGE(20301125) |+---------------------+| 203047 |+---------------------+
Eller endda følgende (som bruger et tocifret årstal):
SELECT YEARWEEK(301125); Resultat:
+------------------------+| ÅR UGE(301125) |+------------------------+| 203047 |+------------------+
Men det skal give mening som en date. Her er, hvad der sker, hvis jeg øger dagsdelen til en ugyldig dag:
SELECT YEARWEEK(20301135); Resultat:
+---------------------------+| ÅR UGE(20301135) |+------------------------+| NULL |+--------------------+1 række i sæt, 1 advarsel (0,000 sek.)
Det returnerede null med en advarsel.
Lad os se på advarslen:
SHOW WARNINGS; Resultat:
+--------+------+------------------------------------- ----------+| Niveau | Kode | Besked |+--------+------+-------------------------------------- --------+| Advarsel | 1292 | Forkert datetime-værdi:'20301135' |+--------+------+------------------------ --------------+
Andre afgrænsninger
Du kan bruge andre skilletegn for datoen. MariaDB er ret tilgivende, når det kommer til afgrænsninger på datoer. Her er nogle gyldige eksempler:
SELECT
YEARWEEK('2030/06/25'),
YEARWEEK('2030,06,25'),
YEARWEEK('2030:06:25'),
YEARWEEK('2030;06!25'); Resultat (ved hjælp af lodret output):
YEARWEEK('2030/06/25'):203025YEARWEEK('2030,06,25'):203025YEARWEEK('2030:06:25'):203025YEARWEEK('2030;02!035'):
før> Aktuel dato
Vi kan sende NOW() som datetime-argument for at bruge den aktuelle dato:
SELECT
NOW(),
YEARWEEK(NOW());
Resultat:
+---------------------+----------------+| NU() | ÅR UGE(NU()) |+---------------------+----------------+| 17-05-2021 09:08:23 | 202120 |+---------------------+------------------------+
Ugyldige argumenter
Når et ugyldigt argument sendes, YEARWEEK() returnerer null :
SELECT YEARWEEK('2030-65-78');
Resultat:
+------------------------+| ÅR UGE('2030-65-78') |+------------------------+| NULL |+------------------------+1 række i sæt, 1 advarsel (0,000 sek.)
Lad os vise advarslen:
SHOW WARNINGS;
Resultat:
+--------+------+------------------------------------- -----------+| Niveau | Kode | Besked |+--------+------+-------------------------------------- ----------+| Advarsel | 1292 | Forkert datetime-værdi:'2030-65-78' |+---------+------+-------------------- --------------------+
Manglende argument
Kalder YEARWEEK() med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:
SELECT YEARWEEK();
Resultat:
FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'YEARWEEK'
Og endnu et eksempel:
SELECT YEARWEEK('2030-12-10', 1, 2);
Resultat:
FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'YEARWEEK'