W MySQL możesz użyć WEEK()
funkcja, aby uzyskać numer tygodnia dla podanej daty. Przez „numer tygodnia” rozumiem tydzień roku.
Aby użyć tej funkcji, po prostu podaj datę jako argument, a numer tygodnia zostanie zwrócony.
Masz również możliwość określenia, czy tydzień ma się zaczynać w niedzielę czy poniedziałek, oraz czy tydzień powinien mieścić się w zakresie od 0 do 53 lub od 1 do 53.
Składnia
Składnia wygląda tak:
WEEK(date[,mode])
Gdzie:
date
to data, z której chcesz zwrócić numer tygodnia.mode
to liczba określająca, czy tydzień powinien rozpoczynać się w niedzielę czy poniedziałek i czy tydzień powinien mieścić się w zakresie od 0 do 53 lub od 1 do 53. Zobacz tabelę poniżej, aby poznać możliwe wartości trybów.
Przykład 1 – Podstawowe użycie
Oto przykład do zademonstrowania.
SELECT WEEK('2021-01-25') As 'Week Number';
Wynik:
+-------------+ | Week Number | +-------------+ | 4 | +-------------+
Oto przykład z datą pod koniec roku.
SELECT WEEK('2021-12-25') As 'Week Number';
Wynik:
+-------------+ | Week Number | +-------------+ | 51 | +-------------+
Przykład 2 – Określ tryb
Jeśli nie określisz drugiego argumentu, WEEK()
funkcja używa trybu określonego przez default_week_format
zmienna systemowa. Domyślna wartość tej zmiennej to 0
.
Masz jednak również możliwość podania drugiego argumentu, aby określić, którego trybu użyć. Przykład:
SELECT WEEK('2019-10-17', 7) AS 'Mode 7';
Wynik:
+--------+ | Mode 7 | +--------+ | 41 | +--------+
Możliwe wartości trybu są następujące.
Tryb | Pierwszy dzień tygodnia | Zakres | Tydzień 1 to pierwszy tydzień… |
---|---|---|---|
0 | Niedziela | 0-53 | z niedzielą w tym roku |
1 | Poniedziałek | 0-53 | z co najmniej 4 dniami w tym roku |
2 | Niedziela | 1-53 | z niedzielą w tym roku |
3 | Poniedziałek | 1-53 | z co najmniej 4 dniami w tym roku |
4 | Niedziela | 0-53 | z co najmniej 4 dniami w tym roku |
5 | Poniedziałek | 0-53 | z poniedziałkiem w tym roku |
6 | Niedziela | 1-53 | z co najmniej 4 dniami w tym roku |
7 | Poniedziałek | 1-53 | z poniedziałkiem w tym roku |
W przypadku wartości trybów, w których tydzień 1 jest pierwszym tygodniem „z co najmniej 4 dniami w tym roku”, tygodnie są ponumerowane zgodnie z ISO 8601:1988:
- Jeśli tydzień zawierający 1 stycznia ma 4 lub więcej dni w nowym roku, jest to tydzień 1.
- W przeciwnym razie jest to ostatni tydzień poprzedniego roku, a następny tydzień to tydzień 1.
Przykład 3 – Porównanie trybów
Oto szybkie porównanie, w jaki sposób można uzyskać różne wyniki w zależności od używanego trybu.
Poniższe trzy przykłady używają tego samego kodu, ale z trzema różnymi datami. Daty te są następujące po sobie – przypadają 5, 6 i 7 stycznia. Jak widać, wyniki mogą się różnić w zależności od dokładnej daty i używanego trybu.
Data 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';
Wynik:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 0 | 1 | 52 | 1 | 1 | 0 | 1 | 53 | +--------+--------+--------+--------+--------+--------+--------+--------+
Data 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';
Wynik:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 1 | 1 | 1 | 2 | 0 | 2 | 53 | +--------+--------+--------+--------+--------+--------+--------+--------+
Data 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';
Wynik:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 2 | 1 | 2 | 2 | 1 | 2 | 1 | +--------+--------+--------+--------+--------+--------+--------+--------+