sql >> Database teknologi >  >> RDS >> MariaDB

Hvordan YEARWEEK() fungerer i MariaDB

I MariaDB, YEARWEEK() er en indbygget dato- og tidsfunktion, der returnerer år og uge for en given dato.

Den accepterer to argumenter; den dato, du vil udtrække året og ugen fra, og et valgfrit tilstandsargument for at angive den tilstand, der skal bruges i resultatet.

Det returnerer ugen som et tal i området 0 til 53 eller 1 til 53 , afhængigt af den anvendte tilstand. Året i resultatet kan også være forskelligt fra året i datoargumentet for årets første og sidste uge.

Syntaks

Syntaksen ser sådan ud:

YEARWEEK(date), YEARWEEK(date,mode) 

Hvilket også kunne udtrykkes sådan:

YEARWEEK(date[,mode]) 

Hvor date er datoudtrykket, der skal hentes år og uge fra, og mode er et valgfrit argument, der lader dig angive en tilstand, der skal bruges.

Tilstande

Den valgfri mode argument bestemmer, om ugen starter søndag eller mandag, og om returværdien skal være i området fra 0 til 53 eller fra 1 til 53 .

Modusargumentet kan være et af følgende:

Tilstand 1. ugedag Rækkevidde Uge 1 er den 1. uge med...
0 søndag 0-53 en søndag i år
1 mandag 0-53 mere end 3 dage i år
2 søndag 1-53 en søndag i år
3 mandag 1-53 mere end 3 dage i år
(i overensstemmelse med ISO 8601:1988)
4 søndag 0-53 mere end 3 dage i år
5 mandag 0-53 en mandag i år
6 søndag 1-53 mere end 3 dage i år
7 mandag 1-53 en mandag i år

Hvis tilstandsargumentet udelades, værdien af ​​default_week_format systemvariabel bruges.

Lad os tjekke værdien af ​​mit default_week_format systemvariabel:

SELECT @@default_week_format; 

Resultat:

+------------------------------+| @@default_week_format |+-----------------------------+| 0 |+------------------------------+

Nu, når jeg kører YEARWEEK() uden at angive en tilstand, vil den bruge tilstanden 0 .

Eksempel

Her er et eksempel på at kalde YEARWEEK() uden at angive tilstanden:

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

Resultat:

+------------------------+| ÅR UGE('2030-01-01') |+------------------------+| 202952 |+------------------------+

I dette tilfælde er det resulterende år og uge fra det foregående år.

Angiv en tilstand

Her er et eksempel på angivelse af tilstanden:

SELECT YEARWEEK('2030-01-01', 1); 

Resultat:

+--------------------------------+| ÅR UGE('2030-01-01', 1) |+--------------------------------+| 203001 |+-----------------------------------+

Denne gang er resultatet anderledes.

Lad os gennemgå alle tilstande for den samme dato:

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); 

Resultat (ved hjælp af lodret output):

YEARWEEK('2030-01-01', 0):202952YEARWEEK('2030-01-01', 1):203001YEARWEEK('2030-01-01', 2):202952YEARWEEK('01-0100) ', 3):203001YEARWEEK('2030-01-01', 4):203001YEARWEEK('2030-01-01', 5):202953YEARWEEK('2030-01-01', 6):20300EK('01ÅR) -01', 7):202953

Dato-tidsværdier

YEARWEEK() funktion fungerer også med datetime-værdier:

SELECT YEARWEEK('2030-08-01 10:30:45'); 

Resultat:

+--------------------------------+| YEARWEEK('2030-08-01 10:30:45') |+---------------------------------------- +| 203030 |+----------------------------------------+

Numeriske datoer

Det er også muligt at videregive datoer som et tal, så længe det giver mening som en dato.

Eksempel

SELECT YEARWEEK(20301125); 

Resultat:

+---------------------------+| ÅR UGE(20301125) |+---------------------+| 203047 |+---------------------+

Eller endda følgende (som bruger et tocifret årstal):

SELECT YEARWEEK(301125); 

Resultat:

+------------------------+| ÅR UGE(301125) |+------------------------+| 203047 |+------------------+

Men det skal give mening som en date. Her er, hvad der sker, hvis jeg øger dagsdelen til en ugyldig dag:

SELECT YEARWEEK(20301135); 

Resultat:

+---------------------------+| ÅR UGE(20301135) |+------------------------+| NULL |+--------------------+1 række i sæt, 1 advarsel (0,000 sek.)

Det returnerede null med en advarsel.

Lad os se på advarslen:

SHOW WARNINGS; 

Resultat:

+--------+------+------------------------------------- ----------+| Niveau | Kode | Besked |+--------+------+-------------------------------------- --------+| Advarsel | 1292 | Forkert datetime-værdi:'20301135' |+--------+------+------------------------ --------------+

Andre afgrænsninger

Du kan bruge andre skilletegn for datoen. MariaDB er ret tilgivende, når det kommer til afgrænsninger på datoer. Her er nogle gyldige eksempler:

SELECT 
    YEARWEEK('2030/06/25'),
    YEARWEEK('2030,06,25'),
    YEARWEEK('2030:06:25'),
    YEARWEEK('2030;06!25'); 

Resultat (ved hjælp af lodret output):

YEARWEEK('2030/06/25'):203025YEARWEEK('2030,06,25'):203025YEARWEEK('2030:06:25'):203025YEARWEEK('2030;02!035'):

før>

Aktuel dato

Vi kan sende NOW() som datetime-argument for at bruge den aktuelle dato:

SELECT 
    NOW(),
    YEARWEEK(NOW()); 

Resultat:

+---------------------+----------------+| NU() | ÅR UGE(NU()) |+---------------------+----------------+| 17-05-2021 09:08:23 | 202120 |+---------------------+------------------------+

Ugyldige argumenter

Når et ugyldigt argument sendes, YEARWEEK() returnerer null :

SELECT YEARWEEK('2030-65-78'); 

Resultat:

+------------------------+| ÅR UGE('2030-65-78') |+------------------------+| NULL |+------------------------+1 række i sæt, 1 advarsel (0,000 sek.)

Lad os vise advarslen:

SHOW WARNINGS; 

Resultat:

+--------+------+------------------------------------- -----------+| Niveau | Kode | Besked |+--------+------+-------------------------------------- ----------+| Advarsel | 1292 | Forkert datetime-værdi:'2030-65-78' |+---------+------+-------------------- --------------------+

Manglende argument

Kalder YEARWEEK() med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:

SELECT YEARWEEK(); 

Resultat:

FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'YEARWEEK'

Og endnu et eksempel:

SELECT YEARWEEK('2030-12-10', 1, 2); 

Resultat:

FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'YEARWEEK'

  1. Brug strtotime til datoer før 1970

  2. MySQL spring de første 10 resultater over

  3. Konverter adgang til PostgreSQL?

  4. ATAN() Funktion i Oracle