I MySQL kan du bruge WEEK()
funktion for at få ugenummeret for en given dato. Med "ugenummer" mener jeg årets uge.
For at bruge funktionen skal du blot angive datoen som et argument, og ugenummeret vil blive returneret.
Du har også mulighed for at angive, om ugen skal starte søndag eller mandag, og om ugen skal være i intervallet 0 til 53 eller 1 til 53.
Syntaks
Syntaksen ser sådan ud:
WEEK(date[,mode])
Hvor:
date
er den dato, du vil have ugenummeret returneret fra.mode
er et tal, der angiver, om ugen skal starte søndag eller mandag, og om ugen skal være i intervallet 0 til 53 eller 1 til 53. Se tabellen nedenfor for de mulige tilstandsværdier.
Eksempel 1 – Grundlæggende brug
Her er et eksempel til at demonstrere.
SELECT WEEK('2021-01-25') As 'Week Number';
Resultat:
+-------------+ | Week Number | +-------------+ | 4 | +-------------+
Her er et eksempel med en dato nær slutningen af året.
SELECT WEEK('2021-12-25') As 'Week Number';
Resultat:
+-------------+ | Week Number | +-------------+ | 51 | +-------------+
Eksempel 2 – Angiv en tilstand
Hvis du ikke angiver et andet argument, er WEEK()
funktionen bruger tilstanden som angivet af default_week_format
systemvariabel. Standardværdien for denne variabel er 0
.
Du har dog også mulighed for at angive et andet argument for at angive, hvilken tilstand der skal bruges. Eksempel:
SELECT WEEK('2019-10-17', 7) AS 'Mode 7';
Resultat:
+--------+ | Mode 7 | +--------+ | 41 | +--------+
De mulige tilstandsværdier er som følger.
Tilstand | Første dag i ugen | Rækkevidde | Uge 1 er den første uge … |
---|---|---|---|
0 | søndag | 0-53 | med en søndag i år |
1 | mandag | 0-53 | med 4 eller flere dage i år |
2 | søndag | 1-53 | med en søndag i år |
3 | mandag | 1-53 | med 4 eller flere dage i år |
4 | søndag | 0-53 | med 4 eller flere dage i år |
5 | mandag | 0-53 | med en mandag i år |
6 | søndag | 1-53 | med 4 eller flere dage i år |
7 | mandag | 1-53 | med en mandag i år |
For tilstandsværdier, hvor uge 1 er den første uge "med 4 eller flere dage i år", er uger nummereret i henhold til ISO 8601:1988:
- Hvis ugen med 1. januar har 4 eller flere dage i det nye år, er det uge 1.
- Ellers er det sidste uge i det foregående år, og den næste uge er uge 1.
Eksempel 3 – Sammenligning af tilstande
Her er en hurtig sammenligning af, hvordan du kan få forskellige resultater afhængigt af den anvendte tilstand.
De følgende tre eksempler bruger den samme kode, men med tre forskellige datoer. Disse datoer er fortløbende – de finder sted den 5., 6. og 7. januar. Som du kan se, kan resultaterne være ret forskellige afhængigt af den nøjagtige dato og den anvendte tilstand.
Dato 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 | +--------+--------+--------+--------+--------+--------+--------+--------+
Dato 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 | +--------+--------+--------+--------+--------+--------+--------+--------+
Dato 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 | +--------+--------+--------+--------+--------+--------+--------+--------+