I SQLite kan vi bruge følgende metode til at beregne den sidste dag i en given måned.
Vi kan basere dette enten på den aktuelle dato eller på en anden specifik dato.
Sidste dag i den aktuelle måned
Her er et eksempel, der returnerer den sidste dag i den aktuelle måned:
SELECT DATE('now', 'start of month', '+1 month', '-1 day');
Resultat:
2022-03-31
Dette bruger DATE()
funktion for at returnere de resultater, vi ønsker. 'now'
argument returnerer den aktuelle dato og 'start of month'
argument ændrer det til begyndelsen af måneden. Vi bruger derefter '+1 month'
for at tilføje en måned til månedens begyndelse (hvilket ville flytte den frem til begyndelsen af den følgende måned), så reducerer vi denne dato med en dag (for at bringe den tilbage til slutningen af den første måned).
Sidste dag i en specificeret måned
Men som nævnt er vi ikke begrænset til kun slutningen af den aktuelle måned. Vi kan angive en hvilken som helst dato, og den returnerer slutningen af måneden, baseret på den dato.
Her er nogle eksempler:
SELECT
DATE('2023-02-10', 'start of month', '+1 month', '-1 day') AS Feb,
DATE('2023-11-10', 'start of month', '+1 month', '-1 day') AS Nov,
DATE('2023-12-10', 'start of month', '+1 month', '-1 day') AS Dec;
Resultat:
Feb Nov Dec ---------- ---------- ---------- 2023-02-28 2023-11-30 2023-12-31
Vi kan se, at SQLite er smart nok til at regne ud, hvor mange dage der er i hver måned. Når vi bruger '+1 month'
, SQLite ved, hvor mange dage der er i hver måned. Vi kan se, at februar har 28 dage, 30. november, og december har 31.
Hvis vi flytter den oprindelige dato frem til 2024, kan vi se, at februar har 29 dage i det år:
SELECT
DATE('2024-02-10', 'start of month', '+1 month', '-1 day') AS Feb,
DATE('2024-11-10', 'start of month', '+1 month', '-1 day') AS Nov,
DATE('2024-12-10', 'start of month', '+1 month', '-1 day') AS Dec;
Resultat:
Feb Nov Dec ---------- ---------- ---------- 2024-02-29 2024-11-30 2024-12-31