I SQLite kan vi använda följande metod för att beräkna den sista dagen i en given månad.
Vi kan basera detta antingen på det aktuella datumet eller på något annat specifikt datum.
Sista dagen i den aktuella månaden
Här är ett exempel som returnerar den sista dagen i innevarande månad:
SELECT DATE('now', 'start of month', '+1 month', '-1 day');
Resultat:
2022-03-31
Detta använder DATE()
funktion för att returnera de resultat vi vill ha. 'now'
argument returnerar det aktuella datumet och 'start of month'
argument ändrar det till början av månaden. Vi använder sedan '+1 month'
för att lägga till en månad till månadens början (vilket skulle flytta den framåt till början av följande månad), så minskar vi det datumet med en dag (för att få tillbaka det till slutet av den första månaden).
Sista dagen i en specificerad månad
Men som nämnt är vi inte begränsade till slutet av bara innevarande månad. Vi kan ange vilket datum som helst, och det återkommer i slutet av månaden, baserat på det datumet.
Här är några exempel:
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 att SQLite är smart nog att räkna ut hur många dagar det är i varje månad. När vi använder '+1 month'
, SQLite vet hur många dagar det är i varje månad. Vi kan se att februari har 28 dagar, 30 november och december har 31.
Om vi flyttar fram det ursprungliga datumet till 2024 kan vi se att februari har 29 dagar det året:
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