In MariaDB, WEEK()
is een ingebouwde datum- en tijdfunctie die de week van een bepaalde datumuitdrukking retourneert.
Het accepteert twee argumenten; de datum waarvan u de week wilt extraheren, en een optioneel modusargument om de modus op te geven die in het resultaat moet worden gebruikt.
Het geeft de week terug als een getal in het bereik 0
tot 53
of 1
tot 53
, afhankelijk van de modus die wordt gebruikt.
Syntaxis
De syntaxis gaat als volgt:
WEEK(date[,mode])
Waar date
is de datumuitdrukking om de week van te krijgen, en mode
is een optioneel argument waarmee u een te gebruiken modus kunt specificeren.
Modi
De optionele mode
argument bepaalt of de week op zondag of maandag begint en of de geretourneerde waarde binnen het bereik van 0
moet liggen tot 53
of vanaf 1
tot 53
.
Het modusargument kan een van de volgende zijn:
Modus | 1e dag van de week | Bereik | Week 1 is de 1e week met... |
---|---|---|---|
0 | Zondag | 0-53 | een zondag in dit jaar |
1 | Maandag | 0-53 | meer dan 3 dagen dit jaar |
2 | Zondag | 1-53 | een zondag in dit jaar |
3 | Maandag | 1-53 | meer dan 3 dagen dit jaar (in overeenstemming met ISO 8601:1988) |
4 | Zondag | 0-53 | meer dan 3 dagen dit jaar |
5 | Maandag | 0-53 | een maandag in dit jaar |
6 | Zondag | 1-53 | meer dan 3 dagen dit jaar |
7 | Maandag | 1-53 | een maandag in dit jaar |
Als het mode-argument wordt weggelaten, wordt de waarde van het default_week_format
systeemvariabele wordt gebruikt.
Laten we eens kijken naar de waarde van mijn default_week_format
systeemvariabele:
SELECT @@default_week_format;
Resultaat:
+-----------------------+ | @@default_week_format | +-----------------------+ | 0 | +-----------------------+
Als ik nu WEEK()
. uitvoer zonder een modus op te geven, gebruikt het modus 0
.
Voorbeeld
Hier is een voorbeeld van het aanroepen van WEEK()
zonder de modus op te geven:
SELECT WEEK('2030-01-01');
Resultaat:
+--------------------+ | WEEK('2030-01-01') | +--------------------+ | 0 | +--------------------+
Geef een modus op
Hier is een voorbeeld van het specificeren van de modus:
SELECT WEEK('2030-01-01', 1);
Resultaat:
+-----------------------+ | WEEK('2030-01-01', 1) | +-----------------------+ | 1 | +-----------------------+
Deze keer is het resultaat 1
in plaats van 0
.
Laten we alle modi voor dezelfde datum doornemen:
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);
Resultaat (met verticale uitvoer):
WEEK('2030-01-01', 0): 0 WEEK('2030-01-01', 1): 1 WEEK('2030-01-01', 2): 52 WEEK('2030-01-01', 3): 1 WEEK('2030-01-01', 4): 1 WEEK('2030-01-01', 5): 0 WEEK('2030-01-01', 6): 1 WEEK('2030-01-01', 7): 53
Datum/tijd-waarden
De WEEK()
functie werkt ook met datetime-waarden:
SELECT WEEK('2030-08-01 10:30:45');
Resultaat:
+-----------------------------+ | WEEK('2030-08-01 10:30:45') | +-----------------------------+ | 30 | +-----------------------------+
Numerieke datums
Het is ook mogelijk om datums als een getal door te geven, zolang het maar logisch is als een datum.
Voorbeeld
SELECT WEEK(20301125);
Resultaat:
+----------------+ | WEEK(20301125) | +----------------+ | 47 | +----------------+
Of zelfs het volgende (met een jaartal van twee cijfers):
SELECT WEEK(301125);
Resultaat:
+--------------+ | WEEK(301125) | +--------------+ | 47 | +--------------+
Maar het moet logisch zijn als een date. Dit gebeurt er als ik het daggedeelte verhoog naar een ongeldige dag:
SELECT WEEK(20301135);
Resultaat:
+----------------+ | WEEK(20301135) | +----------------+ | NULL | +----------------+ 1 row in set, 1 warning (0.001 sec)
Het retourneerde null
met een waarschuwing.
Laten we eens kijken naar de waarschuwing:
SHOW WARNINGS;
Resultaat:
+---------+------+--------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------+ | Warning | 1292 | Incorrect datetime value: '20301135' | +---------+------+--------------------------------------+
Andere scheidingstekens
U kunt andere scheidingstekens voor de datum gebruiken. MariaDB is behoorlijk vergevingsgezind als het gaat om scheidingstekens op datums. Hier zijn enkele geldige voorbeelden:
SELECT
WEEK('2030/06/25'),
WEEK('2030,06,25'),
WEEK('2030:06:25'),
WEEK('2030;06!25');
Resultaat (met verticale uitvoer):
WEEK('2030/06/25'): 25 WEEK('2030,06,25'): 25 WEEK('2030:06:25'): 25 WEEK('2030;06!25'): 25
Huidige datum
We kunnen NOW()
doorgeven als het datetime-argument om de huidige datum te gebruiken:
SELECT
NOW(),
WEEK(NOW());
Resultaat:
+---------------------+-------------+ | NOW() | WEEK(NOW()) | +---------------------+-------------+ | 2021-05-17 08:36:12 | 20 | +---------------------+-------------+
Ongeldige argumenten
Wanneer een ongeldig argument wordt doorgegeven, WEEK()
retourneert null
:
SELECT WEEK('2030-65-78');
Resultaat:
+--------------------+ | WEEK('2030-65-78') | +--------------------+ | NULL | +--------------------+ 1 row in set, 1 warning (0.000 sec)
Laten we de waarschuwing tonen:
SHOW WARNINGS;
Resultaat:
+---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1292 | Incorrect datetime value: '2030-65-78' | +---------+------+----------------------------------------+
Ontbrekend argument
Bellen WEEK()
met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten, resulteert in een fout:
SELECT WEEK();
Resultaat:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1
En nog een voorbeeld:
SELECT WEEK('2030-12-10', 1, 2);
Resultaat:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' 2)' at line 1