W SQLite możemy użyć następującej metody do obliczenia ostatniego dnia danego miesiąca.
Możemy to oprzeć na bieżącej dacie lub innej konkretnej dacie.
Ostatni dzień bieżącego miesiąca
Oto przykład, który zwraca ostatni dzień bieżącego miesiąca:
SELECT DATE('now', 'start of month', '+1 month', '-1 day');
Wynik:
2022-03-31
Używa DATE()
funkcja, aby zwrócić wyniki, które chcemy. 'now'
argument zwraca bieżącą datę i 'start of month'
argument modyfikuje go na początek miesiąca. Następnie używamy '+1 month'
aby dodać miesiąc do początku miesiąca (co przesunęłoby go do przodu na początek następnego miesiąca), następnie zmniejszamy tę datę o jeden dzień (aby cofnąć ją do końca pierwszego miesiąca).
Ostatni dzień określonego miesiąca
Ale jak wspomniano, nie ograniczamy się do końca bieżącego miesiąca. Możemy określić dowolną datę, a zwróci koniec miesiąca na podstawie tej daty.
Oto kilka przykładów:
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;
Wynik:
Feb Nov Dec ---------- ---------- ---------- 2023-02-28 2023-11-30 2023-12-31
Widzimy, że SQLite jest wystarczająco inteligentny, aby obliczyć, ile dni przypada na każdy miesiąc. Kiedy używamy '+1 month'
, SQLite wie, ile dni przypada na każdy miesiąc. Widzimy, że luty ma 28 dni, 30 listopada, a grudzień 31.
Jeśli przesuniemy pierwotną datę do przodu na rok 2024, zobaczymy, że luty ma w tym roku 29 dni:
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;
Wynik:
Feb Nov Dec ---------- ---------- ---------- 2024-02-29 2024-11-30 2024-12-31