I MariaDB, WEEK()
är en inbyggd datum- och tidsfunktion som returnerar veckan från ett givet datumuttryck.
Den godtar två argument; datumet du vill extrahera veckan 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.
Syntax
Syntaxen ser ut så här:
WEEK(date[,mode])
Där date
är datumuttrycket att hämta veckan 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 WEEK()
utan att ange ett läge kommer den att använda läge 0
.
Exempel
Här är ett exempel på hur du anropar WEEK()
utan att ange läget:
SELECT WEEK('2030-01-01');
Resultat:
+----------------------------+| VECKAN('2030-01-01') |+------------------------+| 0 |+---------------------------+
Ange ett läge
Här är ett exempel på hur du anger läget:
SELECT WEEK('2030-01-01', 1);
Resultat:
+------------------------------+| VECKA('2030-01-01', 1) |+-----------------------------+| 1 |+------------------------------+
Den här gången är resultatet 1
istället för 0
.
Låt oss gå igenom alla lägen för samma datum:
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);
Resultat (med vertikal utdata):
WEEK('2030-01-01', 0):0WEEK('2030-01-01', 1):1WEEK('2030-01-01', 2):52WEEK('2030-01-01 ', 3):1WEEK('2030-01-01', 4):1WEEK('2030-01-01', 5):0WEEK('2030-01-01', 6):1WEEK('2030-01 -01', 7):53
Datetime-värden
WEEK()
Funktionen fungerar även med datetime-värden:
SELECT WEEK('2030-08-01 10:30:45');
Resultat:
+-------------------------------------+| VECKA('2030-08-01 10:30:45') |+-----------------------------------+| 30 |+-------------------------------------+
Numeriska datum
Det är också möjligt att skicka datum som ett nummer, så länge det är vettigt som ett datum.
Exempel
SELECT WEEK(20301125);
Resultat:
+----------------+| VECKA(20301125) |+----------------+| 47 |+----------------+
Eller till och med följande (som använder ett tvåsiffrigt år):
SELECT WEEK(301125);
Resultat:
+--------------+| VECKA(301125) |+--------------+| 47 |+--------------------+
Men det måste vara vettigt som en dejt. Så här händer om jag ökar dagdelen till en ogiltig dag:
SELECT WEEK(20301135);
Resultat:
+----------------+| VECKA(20301135) |+----------------+| NULL |+----------------+1 rad i set, 1 varning (0,001 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
WEEK('2030/06/25'),
WEEK('2030,06,25'),
WEEK('2030:06:25'),
WEEK('2030;06!25');
Resultat (med vertikal utdata):
WEEK('2030/06/25'):25WEEK('2030,06,25'):25WEEK('2030:06:25'):25WEEK('2030;06!25'):25Aktuellt datum
Vi kan skicka
NOW()
som datetime-argument för att använda det aktuella datumet:SELECT NOW(), WEEK(NOW());
Resultat:
+----------------------------+-------------+| NU() | VECKA(NU()) |+---------------------+------------+| 2021-05-17 08:36:12 | 20 |+----------------------+-------------+Ogiltiga argument
När ett ogiltigt argument skickades,
WEEK()
returnerarnull
:SELECT WEEK('2030-65-78');
Resultat:
+----------------------------+| VECKA('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
WEEK()
med fel antal argument, eller utan att skicka några argument, resulterar i ett fel:SELECT WEEK();
Resultat:
ERROR 1064 (42000):Du har ett fel i din SQL-syntax; kontrollera manualen som motsvarar din MariaDB-serverversion för rätt syntax att använda nära ')' på rad 1Och ett annat exempel:
SELECT WEEK('2030-12-10', 1, 2);
Resultat:
ERROR 1064 (42000):Du har ett fel i din SQL-syntax; kontrollera manualen som motsvarar din MariaDB-serverversion för rätt syntax att använda nära '2)' på rad 1