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()
returnerernull
: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'