In MySQL können Sie die WEEK()
verwenden Funktion, um die Wochennummer für ein bestimmtes Datum zu erhalten. Mit „Wochennummer“ meine ich die Woche des Jahres.
Um die Funktion zu verwenden, geben Sie einfach das Datum als Argument an und die Wochennummer wird zurückgegeben.
Sie haben auch die Möglichkeit festzulegen, ob die Woche am Sonntag oder am Montag beginnen soll und ob die Woche im Bereich von 0 bis 53 oder 1 bis 53 liegen soll.
Syntax
Die Syntax lautet wie folgt:
WEEK(date[,mode])
Wo:
date
ist das Datum, von dem die Wochennummer zurückgegeben werden soll.mode
ist eine Zahl, die angibt, ob die Woche am Sonntag oder Montag beginnen soll und ob die Woche im Bereich von 0 bis 53 oder 1 bis 53 liegen soll. Siehe die Tabelle unten für die möglichen Moduswerte.
Beispiel 1 – Grundlegende Verwendung
Hier ist ein Beispiel zur Veranschaulichung.
SELECT WEEK('2021-01-25') As 'Week Number';
Ergebnis:
+-------------+ | Week Number | +-------------+ | 4 | +-------------+
Hier ist ein Beispiel mit einem Datum gegen Ende des Jahres.
SELECT WEEK('2021-12-25') As 'Week Number';
Ergebnis:
+-------------+ | Week Number | +-------------+ | 51 | +-------------+
Beispiel 2 – Geben Sie einen Modus an
Wenn Sie kein zweites Argument angeben, die WEEK()
Funktion verwendet den Modus, wie er durch default_week_format
angegeben ist Systemvariable. Der Standardwert dieser Variable ist 0
.
Sie haben jedoch auch die Möglichkeit, ein zweites Argument anzugeben, um anzugeben, welcher Modus verwendet werden soll. Beispiel:
SELECT WEEK('2019-10-17', 7) AS 'Mode 7';
Ergebnis:
+--------+ | Mode 7 | +--------+ | 41 | +--------+
Die möglichen Moduswerte sind wie folgt.
Modus | Erster Wochentag | Bereich | Woche 1 ist die erste Woche … |
---|---|---|---|
0 | Sonntag | 0-53 | mit einem Sonntag in diesem Jahr |
1 | Montag | 0-53 | mit 4 oder mehr Tagen in diesem Jahr |
2 | Sonntag | 1-53 | mit einem Sonntag in diesem Jahr |
3 | Montag | 1-53 | mit 4 oder mehr Tagen in diesem Jahr |
4 | Sonntag | 0-53 | mit 4 oder mehr Tagen in diesem Jahr |
5 | Montag | 0-53 | mit einem Montag in diesem Jahr |
6 | Sonntag | 1-53 | mit 4 oder mehr Tagen in diesem Jahr |
7 | Montag | 1-53 | mit einem Montag in diesem Jahr |
Für Moduswerte, bei denen Woche 1 die erste Woche „mit 4 oder mehr Tagen in diesem Jahr“ ist, werden die Wochen gemäß ISO 8601:1988 nummeriert:
- Wenn die Woche, die den 1. Januar enthält, 4 oder mehr Tage im neuen Jahr hat, ist es die 1. Woche.
- Andernfalls ist es die letzte Woche des Vorjahres und die nächste Woche ist Woche 1.
Beispiel 3 – Vergleich der Modi
Hier ist ein kurzer Vergleich, wie Sie je nach verwendetem Modus unterschiedliche Ergebnisse erzielen können.
Die folgenden drei Beispiele verwenden denselben Code, jedoch mit drei unterschiedlichen Datumsangaben. Diese Daten sind fortlaufend – sie finden am 5., 6. und 7. Januar statt. Wie Sie sehen können, können die Ergebnisse abhängig vom genauen Datum und dem verwendeten Modus sehr unterschiedlich sein.
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';
Ergebnis:
+--------+--------+--------+--------+--------+--------+--------+--------+ | 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';
Ergebnis:
+--------+--------+--------+--------+--------+--------+--------+--------+ | 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';
Ergebnis:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 2 | 1 | 2 | 2 | 1 | 2 | 1 | +--------+--------+--------+--------+--------+--------+--------+--------+