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

Sådan fungerer UGE() i MariaDB

I MariaDB, WEEK() er en indbygget dato- og tidsfunktion, der returnerer ugen fra et givet datoudtryk.

Den accepterer to argumenter; datoen, du vil udtrække 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.

Syntaks

Syntaksen ser sådan ud:

WEEK(date[,mode]) 

Hvor date er datoudtrykket at hente ugen 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 WEEK() uden at angive en tilstand, vil den bruge tilstanden 0 .

Eksempel

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

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

Resultat:

+---------------------------+| UGE('2030-01-01') |+------------------------+| 0 |+----------------------------+

Angiv en tilstand

Her er et eksempel på angivelse af tilstanden:

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

Resultat:

+------------------------------+| UGE('2030-01-01', 1) |+----------------------------+| 1 |+------------------------------+

Denne gang er resultatet 1 i stedet for 0 .

Lad os gennemgå alle tilstande for den samme dato:

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

Resultat (ved hjælp af lodret output):

WEEK('2030-01-01', 0):0WEEK('2030-01-01', 1):1WEEK('2030-01-01', 2):52WEEK('2030-01-01 ', 3):1WEEK('2030-01-01', 4):1WEEK('2030-01-01', 5):0WEEK('2030-01-01', 6):1WEEK('2030-01 -01', 7):53

Dato-tidsværdier

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

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

Resultat:

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

Numeriske datoer

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

Eksempel

SELECT WEEK(20301125); 

Resultat:

+----------------+| UGE(20301125) |+----------------+| 47 |+----------------+

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

SELECT WEEK(301125); 

Resultat:

+--------------+| UGE(301125) |+---------------+| 47 |+---------------+

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

SELECT WEEK(20301135); 

Resultat:

+----------------+| UGE(20301135) |+----------------+| NULL |+----------------+1 række i sæt, 1 advarsel (0,001 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 
    WEEK('2030/06/25'),
    WEEK('2030,06,25'),
    WEEK('2030:06:25'),
    WEEK('2030;06!25'); 

Resultat (ved hjælp af lodret output):

WEEK('2030/06/25'):25WEEK('2030,06,25'):25WEEK('2030:06:25'):25WEEK('2030;06!25'):25 

Aktuel dato

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

SELECT 
    NOW(),
    WEEK(NOW()); 

Resultat:

+----------------------------+-------------+| NU() | UGE(NU()) |+---------------------+------------+| 2021-05-17 08:36:12 | 20 |+----------------------+-------------+

Ugyldige argumenter

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

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

Resultat:

+---------------------------+| 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 WEEK() med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:

SELECT WEEK(); 

Resultat:

FEJL 1064 (42000):Du har en fejl i din SQL-syntaks; tjek manualen, der svarer til din MariaDB-serverversion for den rigtige syntaks til brug i nærheden af ​​')' på linje 1

Og endnu et eksempel:

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

Resultat:

FEJL 1064 (42000):Du har en fejl i din SQL-syntaks; tjek manualen, der svarer til din MariaDB-serverversion for den rigtige syntaks til brug nær '2)' på linje 1

  1. Implementering af en Django-app til AWS Elastic Beanstalk

  2. Microsoft T-SQL til Oracle SQL oversættelse

  3. En databasemodel til en onlineundersøgelse. Del 1

  4. Kunsten at aggregere data i SQL fra simple til glidende aggregationer