sql >> Database >  >> RDS >> MariaDB

Hoe WEEK() werkt in MariaDB

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

  1. Hoe WEIGHT_STRING() werkt in MariaDB

  2. Slaapfunctie in ORACLE

  3. Hoe ik een installatieprogramma voor de website kan maken. PHP mysql

  4. Oracle invoegen van select in tabel met meer kolommen