I MySQL kan du använda WEEK()
funktion för att få veckonummer för ett givet datum. Med "veckonummer" menar jag veckan på året.
För att använda funktionen, ange bara datumet som ett argument och veckonumret kommer att returneras.
Du har också möjlighet att ange om veckan ska börja på söndag eller måndag, och om veckan ska vara i intervallet 0 till 53 eller 1 till 53.
Syntax
Syntaxen ser ut så här:
WEEK(date[,mode])
Var:
date
är det datum du vill ha veckonumret tillbaka från.mode
är ett tal som anger om veckan ska börja på söndag eller måndag och om veckan ska vara i intervallet 0 till 53 eller 1 till 53. Se tabellen nedan för möjliga lägesvärden.
Exempel 1 – Grundläggande användning
Här är ett exempel att visa.
SELECT WEEK('2021-01-25') As 'Week Number';
Resultat:
+-------------+ | Week Number | +-------------+ | 4 | +-------------+
Här är ett exempel med ett datum nära slutet av året.
SELECT WEEK('2021-12-25') As 'Week Number';
Resultat:
+-------------+ | Week Number | +-------------+ | 51 | +-------------+
Exempel 2 – Ange ett läge
Om du inte anger ett andra argument, WEEK()
funktionen använder läget som specificerats av default_week_format
systemvariabel. Standardvärdet för denna variabel är 0
.
Men du har också möjlighet att ange ett andra argument för att specificera vilket läge som ska användas. Exempel:
SELECT WEEK('2019-10-17', 7) AS 'Mode 7';
Resultat:
+--------+ | Mode 7 | +--------+ | 41 | +--------+
De möjliga lägesvärdena är följande.
Läge | Veckans första dag | Räckvidd | Vecka 1 är den första veckan … |
---|---|---|---|
0 | Söndag | 0-53 | med en söndag i år |
1 | måndag | 0-53 | med 4 eller fler dagar i år |
2 | Söndag | 1-53 | med en söndag i år |
3 | måndag | 1-53 | med 4 eller fler dagar i år |
4 | Söndag | 0-53 | med 4 eller fler dagar i år |
5 | måndag | 0-53 | med en måndag i år |
6 | Söndag | 1-53 | med 4 eller fler dagar i år |
7 | måndag | 1-53 | med en måndag i år |
För lägesvärden där vecka 1 är den första veckan "med 4 eller fler dagar i år", är veckorna numrerade enligt ISO 8601:1988:
- Om veckan som innehåller 1 januari har 4 eller fler dagar på det nya året är det vecka 1.
- Annars är det sista veckan föregående år, och nästa vecka är vecka 1.
Exempel 3 – Jämförelse av lägen
Här är en snabb jämförelse av hur du kan få olika resultat beroende på vilket läge som används.
Följande tre exempel använder samma kod, men med tre olika datum. Dessa datum är på varandra följande – de inträffar den 5:e, 6:e och 7:e januari. Som du kan se kan resultaten vara ganska olika beroende på exakt datum och vilket läge som används.
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';
Resultat:
+--------+--------+--------+--------+--------+--------+--------+--------+ | 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';
Resultat:
+--------+--------+--------+--------+--------+--------+--------+--------+ | 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';
Resultat:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 2 | 1 | 2 | 2 | 1 | 2 | 1 | +--------+--------+--------+--------+--------+--------+--------+--------+