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'):25 Aktuellt 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() returnerar null :
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 1
Och 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