I MariaDB, YEARWEEK()
är en inbyggd datum- och tidsfunktion som returnerar år och vecka för ett givet datum.
Den godtar två argument; datumet du vill extrahera år och vecka från, och ett valfritt lägesargument för att ange vilket läge som ska användas i resultatet.
Den returnerar veckan som ett tal i intervallet 0
till 53
eller 1
till 53
, beroende på vilket läge som används. Året i resultatet kan också skilja sig från året i datumargumentet för årets första och sista vecka.
Syntax
Syntaxen ser ut så här:
YEARWEEK(date), YEARWEEK(date,mode)
Vilket också skulle kunna uttryckas så här:
YEARWEEK(date[,mode])
Där date
är datumuttrycket att hämta år och vecka från, och mode
är ett valfritt argument som låter dig ange ett läge att använda.
Lägen
Det valfria mode
argumentet bestämmer om veckan börjar på söndag eller måndag och om returvärdet ska ligga inom intervallet 0
till 53
eller från 1
till 53
.
Modeargumentet kan vara något av följande:
Läge | första veckodagen | Räckvidd | Vecka 1 är den första veckan med... |
---|---|---|---|
0 | Söndag | 0-53 | en söndag i år |
1 | måndag | 0-53 | mer än tre dagar i år |
2 | Söndag | 1-53 | en söndag i år |
3 | måndag | 1-53 | mer än 3 dagar i år (i enlighet med ISO 8601:1988) |
4 | Söndag | 0-53 | mer än tre dagar i år |
5 | måndag | 0-53 | en måndag i år |
6 | Söndag | 1-53 | mer än tre dagar i år |
7 | måndag | 1-53 | en måndag i år |
Om modargumentet utelämnas, värdet för default_week_format
systemvariabel används.
Låt oss kontrollera värdet på mitt default_week_format
systemvariabel:
SELECT @@default_week_format;
Resultat:
+------------------------------+| @@default_week_format |+-----------------------------+| 0 |+------------------------------+
Nu, när jag kör YEARWEEK()
utan att ange ett läge kommer den att använda läge 0
.
Exempel
Här är ett exempel på hur du anropar YEARWEEK()
utan att ange läget:
SELECT YEARWEEK('2030-01-01');
Resultat:
+------------------------+| ÅRSVECKAN('2030-01-01') |+------------------------+| 202952 |+------------------------+
I det här fallet är det resulterande året och veckan från föregående år.
Ange ett läge
Här är ett exempel på hur du anger läget:
SELECT YEARWEEK('2030-01-01', 1);
Resultat:
+--------------------------------+| ÅRSVECKA('2030-01-01', 1) |+--------------------------------+| 203001 |+-----------------------------------+
Den här gången är resultatet ett annat.
Låt oss gå igenom alla lägen för samma datum:
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);
Resultat (med vertikal utdata):
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):20303000-1200 -01', 7):202953
Datetime-värden
YEARWEEK()
Funktionen fungerar även med datetime-värden:
SELECT YEARWEEK('2030-08-01 10:30:45');
Resultat:
+--------------------------------+| ÅRSVECKA('2030-08-01 10:30:45') |+---------------------------------------- +| 203030 |+----------------------------------------+
Numeriska datum
Det är också möjligt att skicka datum som ett nummer, så länge det är vettigt som ett datum.
Exempel
SELECT YEARWEEK(20301125);
Resultat:
+----------------------------+| ÅRSVECKA(20301125) |+---------------------+| 203047 |+---------------------+
Eller till och med följande (som använder ett tvåsiffrigt år):
SELECT YEARWEEK(301125);
Resultat:
+------------------------+| ÅRSVECKAN(301125) |+------------------------+| 203047 |+------------------------+
Men det måste vara vettigt som en dejt. Så här händer om jag ökar dagdelen till en ogiltig dag:
SELECT YEARWEEK(20301135);
Resultat:
+----------------------------+| ÅRSVECKAN(20301135) |+------------------------+| NULL |+--------------------+1 rad i set, 1 varning (0,000 sek)
Den returnerade null
med en varning.
Låt oss titta på varningen:
SHOW WARNINGS;
Resultat:
+--------+------+------------------------------------ ----------+| Nivå | Kod | Meddelande |+--------+------+-------------------------------------- --------+| Varning | 1292 | Felaktigt datetime-värde:'20301135' |+--------+------+------------------------ --------------+
Andra avgränsare
Du kan använda andra avgränsare för datumet. MariaDB är ganska förlåtande när det kommer till avgränsare på datum. Här är några giltiga exempel:
SELECT
YEARWEEK('2030/06/25'),
YEARWEEK('2030,06,25'),
YEARWEEK('2030:06:25'),
YEARWEEK('2030;06!25');
Resultat (med vertikal utdata):
YEARWEEK('2030/06/25'):203025YEARWEEK('2030,06,25'):203025YEARWEEK('2030:06:25'):203025YEARWEEK('2030;02!035'): före>Aktuellt datum
Vi kan skicka
NOW()
som datetime-argument för att använda det aktuella datumet:SELECT NOW(), YEARWEEK(NOW());
Resultat:
+----------------------------+----------------+| NU() | ÅRSVECKA(NU()) |+----------------------------+----------------+| 2021-05-17 09:08:23 | 202120 |+---------------------+------------------------+Ogiltiga argument
När ett ogiltigt argument skickades,
YEARWEEK()
returnerarnull
:SELECT YEARWEEK('2030-65-78');
Resultat:
+------------------------+| ÅRSVECKAN('2030-65-78') |+------------------------+| NULL |+------------------------+1 rad i set, 1 varning (0,000 sek)Låt oss visa varningen:
SHOW WARNINGS;
Resultat:
+--------+------+------------------------------------ -----------+| Nivå | Kod | Meddelande |+--------+------+-------------------------------------- ----------+| Varning | 1292 | Felaktigt datetime-värde:'2030-65-78' |+---------+------+-------------------- --------------------+Argument saknas
Anropar
YEARWEEK()
med fel antal argument, eller utan att skicka några argument, resulterar i ett fel:SELECT YEARWEEK();
Resultat:
ERROR 1582 (42000):Fel parameterantal i anropet till den ursprungliga funktionen 'YEARWEEK'Och ett annat exempel:
SELECT YEARWEEK('2030-12-10', 1, 2);
Resultat:
ERROR 1582 (42000):Fel parameterantal i anropet till den ursprungliga funktionen 'YEARWEEK'