sql >> Database >  >> RDS >> MariaDB

Hoe YEARWEEK() werkt in MariaDB

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'

  1. Kan een controlebeperking betrekking hebben op een andere tabel?

  2. Hoe kan ik de inhoud van een orakeltabel naar een bestand exporteren?

  3. java.security.AccessControlException:toegang geweigerd (java.security.SecurityPermission authProvider.SunMSCAPI)

  4. Hoe u SQL-resultaten filtert in een heeft-veel-door-relatie