sql >> Databasteknik >  >> RDS >> MariaDB

5 funktioner för att extrahera veckonummer från ett datum i MariaDB

Nedan finns 5 funktioner som gör att du kan returnera veckonummer från ett datum i MariaDB. Fyra returnerar bara veckan, och en returnerar både veckan och året tillsammans.

WEEK() Funktion

WEEK() funktion returnerar veckan för ett givet datum.

Exempel:

SELECT WEEK('2023-07-25');

Resultat:

+--------------------+
| WEEK('2023-07-25') |
+--------------------+
|                 30 |
+--------------------+

WEEK() funktion accepterar ett valfritt andra argument för att specificera läget. Det faktiska resultatet du får från denna funktion beror på vilket läge som används. Om modargumentet utelämnas, värdet för default_week_format systemvariabel används.

Se hur WEEK() Fungerar i MariaDB för mer om lägen och exempel på var och en.

EXTRACT() Funktion

EXTRACT () funktionen låter dig extrahera en specificerad enhet från datumet. Därför kan du använda den för att extrahera veckan (liksom andra enheter) från datumet.

Exempel:

SELECT EXTRACT(WEEK FROM '2023-07-25');

Resultat:

+---------------------------------+
| EXTRACT(WEEK FROM '2023-07-25') |
+---------------------------------+
|                              30 |
+---------------------------------+

DATE_FORMAT() Funktion

DATE_FORMAT() funktionen låter dig formatera ett datum baserat på en formatsträng. Formatsträngen anger hur datumet ska formateras.

Du kan därför använda denna funktion för att returnera veckan (liksom vilken annan enhet som helst) från datumet. Det finns olika alternativ för att returnera veckonummer, beroende på vilken dag veckan börjar etc.

Här är ett exempel som returnerar veckan i olika former:

SELECT 
    DATE_FORMAT('2023-01-01', '%U') AS "%U",
    DATE_FORMAT('2023-01-01', '%u') AS "%u",
    DATE_FORMAT('2023-01-01', '%V') AS "%V",
    DATE_FORMAT('2023-01-01', '%v') AS "%v";

Resultat:

+------+------+------+------+
| %U   | %u   | %V   | %v   |
+------+------+------+------+
| 01   | 00   | 01   | 52   |
+------+------+------+------+

Här är en beskrivning av var och en av dessa formatspecifikationer:

Formatspecifikation Beskrivning
%U Veckonummer (00-53), när första dagen i veckan är söndag.
%u Veckonummer (00-53), när första dagen i veckan är måndag.
%V Veckonummer (01-53), när första dagen i veckan är söndag. Används med %X .
%v Veckonummer (01-53), när första dagen i veckan är måndag. Används med %x .

Och här är en beskrivning av %X och %x enligt ovanstående tabell:

Formatspecifikation Beskrivning
%X Årtal med 4 siffror när första dagen i veckan är söndag. Används med %V .
%x Årtal med 4 siffror när första dagen i veckan är måndag. Används med %v .

Vi kan kombinera formatspecifikationer för att returnera år och vecka tillsammans om det behövs:

SELECT 
    DATE_FORMAT('2023-01-01', '%X, %V') AS "%X, %V",
    DATE_FORMAT('2023-01-01', '%x, %v') AS "%x, %v";

Resultat:

+----------+----------+
| %X, %V   | %x, %v   |
+----------+----------+
| 2023, 01 | 2022, 52 |
+----------+----------+

Observera att veckonumret inte alltid återspeglar exemplen ovan – det beror på det faktiska datumet som används.

Låt oss flytta fram datumet ett år:

SELECT 
    DATE_FORMAT('2024-01-01', '%U') AS "%U",
    DATE_FORMAT('2024-01-01', '%u') AS "%u",
    DATE_FORMAT('2024-01-01', '%V') AS "%V",
    DATE_FORMAT('2024-01-01', '%v') AS "%v";

Resultat:

+------+------+------+------+
| %U   | %u   | %V   | %v   |
+------+------+------+------+
| 00   | 01   | 53   | 01   |
+------+------+------+------+

Den här gången får vi en annan uppsättning resultat.

Det här är vad som händer när vi går framåt in i året:

SELECT 
    DATE_FORMAT('2024-12-12', '%U') AS "%U",
    DATE_FORMAT('2024-12-12', '%u') AS "%u",
    DATE_FORMAT('2024-12-12', '%V') AS "%V",
    DATE_FORMAT('2024-12-12', '%v') AS "%v";

Resultat:

+------+------+------+------+
| %U   | %u   | %V   | %v   |
+------+------+------+------+
| 49   | 50   | 49   | 50   |
+------+------+------+------+

Som du kan se är det inte alltid så tydligt att returnera veckonumret som vi kanske önskar.

Se MariaDB Format Strings för en fullständig lista över formatsträngar/specifikationer som kan användas med DATE_FORMAT() .

YEARWEEK() Funktion

Det är möjligt att få veckan och år i ett svep. YEARWEEK() funktion returnerar år och vecka för ett givet datum.

Exempel:

SELECT YEARWEEK('2023-01-01');

Resultat:

+------------------------+
| YEARWEEK('2023-01-01') |
+------------------------+
|                 202301 |
+------------------------+

Årtalet i resultatet kan skilja sig från året i datumargumentet för årets första och sista vecka.

Så här händer om vi går framåt ett år:

SELECT YEARWEEK('2024-01-01');

Resultat:

+------------------------+
| YEARWEEK('2024-01-01') |
+------------------------+
|                 202353 |
+------------------------+

Som med WEEK() funktionen, YEARWEEK() funktion accepterar ett valfritt andra argument för att specificera läget. Det faktiska resultatet du får från denna funktion beror på vilket läge som används. Om modargumentet utelämnas, värdet för default_week_format systemvariabel används.

Se hur YEARWEEK() Fungerar i MariaDB för mer om lägen och exempel på var och en.


  1. Hur man beräknar skillnaden mellan två tidsstämplar i Oracle

  2. Hur man importerar MySQL-databaser på kommandoraden

  3. Hitta värdnamnet och porten med PSQL-kommandon

  4. Hur man bulkinfogar bara nya rader i PostreSQL