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'):25Aktuel 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()
returnerernull
: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 1Og 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