В SQLite можем да използваме следния метод, за да изчислим последния ден от даден месец.
Можем да базираме това или на текущата дата, или на друга конкретна дата.
Последен ден от текущия месец
Ето пример, който връща последния ден от текущия месец:
SELECT DATE('now', 'start of month', '+1 month', '-1 day');
Резултат:
2022-03-31
Това използва DATE()
функция за връщане на резултатите, които искаме. 'now'
аргументът връща текущата дата и 'start of month'
аргумент го променя към началото на месеца. След това използваме '+1 month'
за да добавим месец към началото на месеца (което ще го измести напред към началото на следващия месец), след това намаляваме тази дата с един ден (за да я върнем в края на първоначалния месец).
Последен ден от посочения месец
Но както споменахме, ние не сме ограничени само до края на текущия месец. Можем да посочим всяка дата и тя ще върне края на месеца въз основа на тази дата.
Ето няколко примера:
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;
Резултат:
Feb Nov Dec ---------- ---------- ---------- 2023-02-28 2023-11-30 2023-12-31
Можем да видим, че SQLite е достатъчно умен, за да определи колко дни има всеки месец. Когато използваме '+1 month'
, SQLite знае колко дни има всеки месец. Виждаме, че февруари има 28 дни, 30 ноември, а декември 31.
Ако преместим първоначалната дата напред към 2024 г., можем да видим, че февруари има 29 дни в тази година:
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;
Резултат:
Feb Nov Dec ---------- ---------- ---------- 2024-02-29 2024-11-30 2024-12-31