In MySQL kunt u de WEEK()
functie om het weeknummer voor een bepaalde datum te krijgen. Met "weeknummer" bedoel ik de week van het jaar.
Om de functie te gebruiken, geeft u gewoon de datum op als argument en het weeknummer wordt geretourneerd.
Je hebt ook de mogelijkheid om aan te geven of de week op zondag of maandag moet beginnen en of de week tussen 0 en 53 of tussen 1 en 53 moet liggen.
Syntaxis
De syntaxis gaat als volgt:
WEEK(date[,mode])
Waar:
date
is de datum waarvan u het weeknummer wilt retourneren.mode
is een getal dat aangeeft of de week op zondag of maandag moet beginnen en of de week tussen 0 en 53 of tussen 1 en 53 moet liggen. Zie de onderstaande tabel voor de mogelijke moduswaarden.
Voorbeeld 1 – Basisgebruik
Hier is een voorbeeld om te demonstreren.
SELECT WEEK('2021-01-25') As 'Week Number';
Resultaat:
+-------------+ | Week Number | +-------------+ | 4 | +-------------+
Hier is een voorbeeld met een datum tegen het einde van het jaar.
SELECT WEEK('2021-12-25') As 'Week Number';
Resultaat:
+-------------+ | Week Number | +-------------+ | 51 | +-------------+
Voorbeeld 2 – Specificeer een modus
Als u geen tweede argument opgeeft, wordt de WEEK()
functie gebruikt de modus zoals gespecificeerd door de default_week_format
systeem variabele. De standaardwaarde van deze variabele is 0
.
U hebt echter ook de mogelijkheid om een tweede argument op te geven om aan te geven welke modus u wilt gebruiken. Voorbeeld:
SELECT WEEK('2019-10-17', 7) AS 'Mode 7';
Resultaat:
+--------+ | Mode 7 | +--------+ | 41 | +--------+
De mogelijke moduswaarden zijn als volgt.
Modus | Eerste dag van de week | Bereik | Week 1 is de eerste week … |
---|---|---|---|
0 | Zondag | 0-53 | met een zondag in dit jaar |
1 | Maandag | 0-53 | met 4 of meer dagen dit jaar |
2 | Zondag | 1-53 | met een zondag in dit jaar |
3 | Maandag | 1-53 | met 4 of meer dagen dit jaar |
4 | Zondag | 0-53 | met 4 of meer dagen dit jaar |
5 | Maandag | 0-53 | met een maandag in dit jaar |
6 | Zondag | 1-53 | met 4 of meer dagen dit jaar |
7 | Maandag | 1-53 | met een maandag in dit jaar |
Voor moduswaarden waarbij week 1 de eerste week is "met 4 of meer dagen dit jaar", worden de weken genummerd volgens ISO 8601:1988:
- Als de week met 1 januari 4 of meer dagen in het nieuwe jaar heeft, is het week 1.
- Anders is het de laatste week van het voorgaande jaar en is de volgende week week 1.
Voorbeeld 3 – Vergelijking van modi
Hier is een snelle vergelijking van hoe u verschillende resultaten kunt krijgen, afhankelijk van de modus die wordt gebruikt.
De volgende drie voorbeelden gebruiken dezelfde code, maar met drie verschillende datums. Deze data zijn opeenvolgend - ze vallen op 5, 6 en 7 januari. Zoals je kunt zien, kunnen de resultaten behoorlijk verschillen, afhankelijk van de exacte datum en de modus die wordt gebruikt.
Datum 1
SET @date = '2019-01-05'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Resultaat:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 0 | 1 | 52 | 1 | 1 | 0 | 1 | 53 | +--------+--------+--------+--------+--------+--------+--------+--------+
Datum 2
SET @date = '2019-01-06'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Resultaat:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 1 | 1 | 1 | 2 | 0 | 2 | 53 | +--------+--------+--------+--------+--------+--------+--------+--------+
Datum 3
SET @date = '2019-01-07'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Resultaat:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 2 | 1 | 2 | 2 | 1 | 2 | 1 | +--------+--------+--------+--------+--------+--------+--------+--------+