In MariaDB, YEARWEEK()
is een ingebouwde datum- en tijdfunctie die het jaar en de week voor een bepaalde datum retourneert.
Het accepteert twee argumenten; de datum waarvan u het jaar en 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. Ook kan het jaar in het resultaat verschillen van het jaar in het datumargument voor de eerste en de laatste week van het jaar.
Syntaxis
De syntaxis gaat als volgt:
YEARWEEK(date), YEARWEEK(date,mode)
Wat ook zo kan worden uitgedrukt:
YEARWEEK(date[,mode])
Waar date
is de datumuitdrukking om het jaar en de week uit te halen, 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 YEARWEEK()
. uitvoer zonder een modus op te geven, gebruikt het modus 0
.
Voorbeeld
Hier is een voorbeeld van het aanroepen van YEARWEEK()
zonder de modus op te geven:
SELECT YEARWEEK('2030-01-01');
Resultaat:
+------------------------+ | YEARWEEK('2030-01-01') | +------------------------+ | 202952 | +------------------------+
In dit geval zijn het resulterende jaar en de week van het voorgaande jaar.
Specificeer een modus
Hier is een voorbeeld van het specificeren van de modus:
SELECT YEARWEEK('2030-01-01', 1);
Resultaat:
+---------------------------+ | YEARWEEK('2030-01-01', 1) | +---------------------------+ | 203001 | +---------------------------+
Deze keer is het resultaat anders.
Laten we alle modi voor dezelfde datum doornemen:
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);
Resultaat (met verticale uitvoer):
YEARWEEK('2030-01-01', 0): 202952 YEARWEEK('2030-01-01', 1): 203001 YEARWEEK('2030-01-01', 2): 202952 YEARWEEK('2030-01-01', 3): 203001 YEARWEEK('2030-01-01', 4): 203001 YEARWEEK('2030-01-01', 5): 202953 YEARWEEK('2030-01-01', 6): 203001 YEARWEEK('2030-01-01', 7): 202953
Datum/tijd-waarden
De YEARWEEK()
functie werkt ook met datetime-waarden:
SELECT YEARWEEK('2030-08-01 10:30:45');
Resultaat:
+---------------------------------+ | YEARWEEK('2030-08-01 10:30:45') | +---------------------------------+ | 203030 | +---------------------------------+
Numerieke datums
Het is ook mogelijk om datums als een getal door te geven, zolang het maar logisch is als een datum.
Voorbeeld
SELECT YEARWEEK(20301125);
Resultaat:
+--------------------+ | YEARWEEK(20301125) | +--------------------+ | 203047 | +--------------------+
Of zelfs het volgende (met een jaartal van twee cijfers):
SELECT YEARWEEK(301125);
Resultaat:
+------------------+ | YEARWEEK(301125) | +------------------+ | 203047 | +------------------+
Maar het moet logisch zijn als een date. Dit gebeurt er als ik het daggedeelte verhoog naar een ongeldige dag:
SELECT YEARWEEK(20301135);
Resultaat:
+--------------------+ | YEARWEEK(20301135) | +--------------------+ | NULL | +--------------------+ 1 row in set, 1 warning (0.000 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
YEARWEEK('2030/06/25'),
YEARWEEK('2030,06,25'),
YEARWEEK('2030:06:25'),
YEARWEEK('2030;06!25');
Resultaat (met verticale uitvoer):
YEARWEEK('2030/06/25'): 203025 YEARWEEK('2030,06,25'): 203025 YEARWEEK('2030:06:25'): 203025 YEARWEEK('2030;06!25'): 203025
Huidige datum
We kunnen NOW()
doorgeven als het datetime-argument om de huidige datum te gebruiken:
SELECT
NOW(),
YEARWEEK(NOW());
Resultaat:
+---------------------+-----------------+ | NOW() | YEARWEEK(NOW()) | +---------------------+-----------------+ | 2021-05-17 09:08:23 | 202120 | +---------------------+-----------------+
Ongeldige argumenten
Wanneer een ongeldig argument wordt doorgegeven, YEARWEEK()
retourneert null
:
SELECT YEARWEEK('2030-65-78');
Resultaat:
+------------------------+ | YEARWEEK('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 YEARWEEK()
met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten, resulteert in een fout:
SELECT YEARWEEK();
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'YEARWEEK'
En nog een voorbeeld:
SELECT YEARWEEK('2030-12-10', 1, 2);
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'YEARWEEK'