MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Wie YEARWEEK() in MariaDB funktioniert

In MariaDB, YEARWEEK() ist eine integrierte Datums- und Uhrzeitfunktion, die das Jahr und die Woche für ein bestimmtes Datum zurückgibt.

Es akzeptiert zwei Argumente; das Datum, aus dem Sie das Jahr und 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 bis 53 oder 1 bis 53 , abhängig vom verwendeten Modus. Außerdem kann sich das Jahr im Ergebnis von dem Jahr im Datumsargument für die erste und letzte Woche des Jahres unterscheiden.

Syntax

Die Syntax lautet wie folgt:

YEARWEEK(date), YEARWEEK(date,mode) 

Was man auch so ausdrücken könnte:

YEARWEEK(date[,mode]) 

Wobei date ist der Datumsausdruck, aus dem das Jahr und die Woche abgerufen werden, 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 bis 53 oder von 1 bis 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 YEARWEEK() ausführe ohne Angabe eines Modus wird der Modus 0 verwendet .

Beispiel

Hier ist ein Beispiel für den Aufruf von YEARWEEK() ohne Angabe des Modus:

SELECT YEARWEEK('2030-01-01'); 

Ergebnis:

+------------------------+| JAHRESWOCHE('2030-01-01') |+---------------------------------+| 202952 |+-----------------------+

In diesem Fall stammen das resultierende Jahr und die Woche aus dem Vorjahr.

Geben Sie einen Modus an

Hier ist ein Beispiel für die Angabe des Modus:

SELECT YEARWEEK('2030-01-01', 1); 

Ergebnis:

+-----------------------------------+| YEARWEEK('2030-01-01', 1) |+-----------------------------------+| 203001 |+--------------------------+

Diesmal ist das Ergebnis anders.

Lassen Sie uns alle Modi für dasselbe Datum durchlaufen:

SELECT 
    YEARWEEK('2030-01-01', 0),
    YEARWEEK('2030-01-01', 1),
    YEARWEEK('2030-01-01', 2),
    YEARWEEK('2030-01-01', 3),
    YEARWEEK('2030-01-01', 4),
    YEARWEEK('2030-01-01', 5),
    YEARWEEK('2030-01-01', 6),
    YEARWEEK('2030-01-01', 7); 

Ergebnis (bei vertikaler Ausgabe):

YEARWEEK('2030-01-01', 0):202952YEARWEEK('2030-01-01', 1):203001YEARWEEK('2030-01-01', 2):202952YEARWEEK('2030-01-01 ', 3):203001YEARWEEK('2030-01-01', 4):203001YEARWEEK('2030-01-01', 5):202953YEARWEEK('2030-01-01', 6):203001YEARWEEK('2030-01 -01', 7):202953

Datum/Uhrzeit-Werte

Die YEARWEEK() Funktion funktioniert auch mit datetime-Werten:

SELECT YEARWEEK('2030-08-01 10:30:45'); 

Ergebnis:

+---------------------------------+| JAHRESWOCHE('2030-08-01 10:30:45') |+--------------------------------------------- +| 203030 |+---------------------------------------------+

Numerische Daten

Es ist auch möglich, Datumsangaben als Zahl zu übergeben, sofern es als Datum sinnvoll ist.

Beispiel

SELECT YEARWEEK(20301125); 

Ergebnis:

+--------------------+| JAHRESWOCHE(20301125) |+--------------------+| 203047 |+--------------------+

Oder sogar das Folgende (das eine zweistellige Jahreszahl verwendet):

SELECT YEARWEEK(301125); 

Ergebnis:

+------------------+| JAHRESWOCHE(301125) |+------------------+| 203047 |+-----------------+

Aber als Date muss es Sinn machen. Folgendes passiert, wenn ich den Tagesteil auf einen ungültigen Tag erhöhe:

SELECT YEARWEEK(20301135); 

Ergebnis:

+--------------------+| JAHRESWOCHE(20301135) |+--------------------+| NULL |+--------------------+1 Zeile im Satz, 1 Warnung (0,000 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 
    YEARWEEK('2030/06/25'),
    YEARWEEK('2030,06,25'),
    YEARWEEK('2030:06:25'),
    YEARWEEK('2030;06!25'); 

Ergebnis (bei vertikaler Ausgabe):

YEARWEEK('2030/06/25'):203025YEARWEEK('2030,06,25'):203025YEARWEEK('2030:06:25'):203025YEARWEEK('2030;06!25'):203025 

Aktuelles Datum

Wir können NOW() übergeben als datetime-Argument, um das aktuelle Datum zu verwenden:

SELECT 
    NOW(),
    YEARWEEK(NOW()); 

Ergebnis:

+---------------------+-----------------+| JETZT() | JAHRESWOCHE(JETZT()) |+---------------------+-----------------+| 2021-05-17 09:08:23 | 202120 |+---------------------+----------------+

Ungültige Argumente

Wenn ein ungültiges Argument übergeben wird, YEARWEEK() gibt null zurück :

SELECT YEARWEEK('2030-65-78'); 

Ergebnis:

+------------------------+| JAHRESWOCHE('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 YEARWEEK() mit der falschen Anzahl von Argumenten oder ohne Übergabe von Argumenten führt zu einem Fehler:

SELECT YEARWEEK(); 

Ergebnis:

FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion 'YEARWEEK'

Und noch ein Beispiel:

SELECT YEARWEEK('2030-12-10', 1, 2); 

Ergebnis:

FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion 'YEARWEEK'