In MariaDB, WEEK()
ist eine eingebaute Datums- und Zeitfunktion, die die Woche aus einem gegebenen Datumsausdruck zurückgibt.
Es akzeptiert zwei Argumente; das Datum, aus dem Sie die Woche extrahieren möchten, und ein optionales Modusargument, um den Modus anzugeben, der im Ergebnis verwendet werden soll.
Es gibt die Woche als Zahl im Bereich 0
zurück zu 53
oder 1
zu 53
, abhängig vom verwendeten Modus.
Syntax
Die Syntax lautet wie folgt:
WEEK(date[,mode])
Wobei date
ist der Datumsausdruck, aus dem die Woche abgerufen werden soll, und mode
ist ein optionales Argument, mit dem Sie einen zu verwendenden Modus angeben können.
Modi
Der optionale mode
Argument bestimmt, ob die Woche am Sonntag oder am Montag beginnt und ob der Rückgabewert im Bereich von 0
liegen soll zu 53
oder von 1
zu 53
.
Das Modusargument kann eines der folgenden sein:
Modus | erster Wochentag | Bereich | Woche 1 ist die 1. Woche mit… |
---|---|---|---|
0 | Sonntag | 0-53 | ein Sonntag in diesem Jahr |
1 | Montag | 0-53 | mehr als 3 Tage in diesem Jahr |
2 | Sonntag | 1-53 | ein Sonntag in diesem Jahr |
3 | Montag | 1-53 | mehr als 3 Tage in diesem Jahr (gemäß ISO 8601:1988) |
4 | Sonntag | 0-53 | mehr als 3 Tage in diesem Jahr |
5 | Montag | 0-53 | ein Montag in diesem Jahr |
6 | Sonntag | 1-53 | mehr als 3 Tage in diesem Jahr |
7 | Montag | 1-53 | ein Montag in diesem Jahr |
Wenn das Modusargument weggelassen wird, der Wert von default_week_format
Systemvariable wird verwendet.
Lassen Sie uns den Wert meines default_week_format
überprüfen Systemvariable:
SELECT @@default_week_format;
Ergebnis:
+-----------------------+| @@default_week_format |+---------------------+| 0 |+----------------------+
Wenn ich jetzt WEEK()
ausführe ohne Angabe eines Modus wird der Modus 0
verwendet .
Beispiel
Hier ist ein Beispiel für den Aufruf von WEEK()
ohne Angabe des Modus:
SELECT WEEK('2030-01-01');
Ergebnis:
+--------------------+| WOCHE('2030-01-01') |+--------------------+| 0 |+--------------------+
Geben Sie einen Modus an
Hier ist ein Beispiel für die Angabe des Modus:
SELECT WEEK('2030-01-01', 1);
Ergebnis:
+-----------------------+| WOCHE('2030-01-01', 1) |+-----------------------+| 1 |+-----------------------+
Diesmal ist das Ergebnis 1
statt 0
.
Lassen Sie uns alle Modi für dasselbe Datum durchlaufen:
SELECT
WEEK('2030-01-01', 0),
WEEK('2030-01-01', 1),
WEEK('2030-01-01', 2),
WEEK('2030-01-01', 3),
WEEK('2030-01-01', 4),
WEEK('2030-01-01', 5),
WEEK('2030-01-01', 6),
WEEK('2030-01-01', 7);
Ergebnis (bei vertikaler Ausgabe):
WOCHE('2030-01-01', 0):0WOCHE('2030-01-01', 1):1WOCHE('2030-01-01', 2):52WOCHE('2030-01-01 ', 3):1WOCHE('2030-01-01', 4):1WOCHE('2030-01-01', 5):0WOCHE('2030-01-01', 6):1WOCHE('2030-01 -01', 7):53
Datum/Uhrzeit-Werte
Die WEEK()
Funktion funktioniert auch mit datetime-Werten:
SELECT WEEK('2030-08-01 10:30:45');
Ergebnis:
+-------------------------------------+| WOCHE('2030-08-01 10:30:45') |+-------------------------------------+| 30 |+-------------------------------------+
Numerische Daten
Es ist auch möglich, Datumsangaben als Zahl zu übergeben, sofern es als Datum sinnvoll ist.
Beispiel
SELECT WEEK(20301125);
Ergebnis:
+----------------+| WOCHE(20301125) |+----------------+| 47 |+----------------+
Oder sogar das Folgende (das eine zweistellige Jahreszahl verwendet):
SELECT WEEK(301125);
Ergebnis:
+--------------+| WEEK(301125) |+--------------+| 47 |+--------------+
Aber als Date muss es Sinn machen. Folgendes passiert, wenn ich den Tagesteil auf einen ungültigen Tag erhöhe:
SELECT WEEK(20301135);
Ergebnis:
+----------------+| WOCHE(20301135) |+----------------+| NULL |+----------------+1 Zeile im Satz, 1 Warnung (0,001 Sek.)
Es hat null
zurückgegeben mit einer Warnung.
Schauen wir uns die Warnung an:
SHOW WARNINGS;
Ergebnis:
+---------+------+------------------------------------- ---------+| Ebene | Code | Nachricht |+---------+------+------------------------------ --------+| Warnung | 1292 | Falscher datetime-Wert:'20301135' |+---------+------+----------------------- --------------+
Andere Trennzeichen
Sie können andere Trennzeichen für das Datum verwenden. MariaDB ist ziemlich nachsichtig, wenn es um Trennzeichen bei Datumsangaben geht. Hier sind einige gültige Beispiele:
SELECT
WEEK('2030/06/25'),
WEEK('2030,06,25'),
WEEK('2030:06:25'),
WEEK('2030;06!25');
Ergebnis (bei vertikaler Ausgabe):
WOCHE('2030/06/25'):25WOCHE('2030,06,25'):25WOCHE('2030:06:25'):25WOCHE('2030;06!25'):25Aktuelles Datum
Wir können
NOW()
übergeben als datetime-Argument, um das aktuelle Datum zu verwenden:SELECT NOW(), WEEK(NOW());
Ergebnis:
+---------------------+---------------------+| JETZT() | WOCHE(JETZT()) |+---------------------+-------------+| 2021-05-17 08:36:12 | 20 |+---------------------+---------------------+Ungültige Argumente
Wenn ein ungültiges Argument übergeben wird,
WEEK()
gibtnull
zurück :SELECT WEEK('2030-65-78');
Ergebnis:
+--------------------+| WOCHE('2030-65-78') |+--------------------+| NULL |+--------------------+1 Zeile im Satz, 1 Warnung (0,000 Sek.)Lassen Sie uns die Warnung anzeigen:
SHOW WARNINGS;
Ergebnis:
+---------+------+------------------------------------- -----------+| Ebene | Code | Nachricht |+---------+------+------------------------------ ----------+| Warnung | 1292 | Falscher datetime-Wert:'2030-65-78' |+---------+------+-------------------- --------------------+Fehlendes Argument
Aufruf von
WEEK()
mit der falschen Anzahl von Argumenten oder ohne Übergabe von Argumenten führt zu einem Fehler:SELECT WEEK();
Ergebnis:
ERROR 1064 (42000):Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, auf die richtige Syntax, um sie in der Nähe von ')' in Zeile 1 zu verwendenUnd noch ein Beispiel:
SELECT WEEK('2030-12-10', 1, 2);
Ergebnis:
ERROR 1064 (42000):Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, auf die richtige Syntax, die in der Nähe von ' 2)' in Zeile 1 zu verwenden ist