В Oracle Database можем да използваме LAST_DAY()
функция за връщане на последния ден от даден месец. Това може да бъде последният ден от текущия месец или последният ден от месеца въз основа на посочена дата.
Пример
SELECT LAST_DAY(date '2035-02-15')
FROM DUAL;
Резултат:
28-FEB-35
Последният ден от месеца се дефинира от параметъра на сесията NLS_CALENDAR
. Вижте как да проверите стойностите на параметрите на NLS, за да разберете кой календар използва вашата сесия. Моят използва григорианския календар.
Ето какво се случва, когато преместим датата с една година напред:
SELECT LAST_DAY(date '2036-02-15')
FROM DUAL;
Резултат:
29-FEB-36
Следващата година е високосна и така получаваме 29 дни през февруари същата година.
Имайте предвид, че LAST_DAY()
функцията връща DATE
стойност. Това е вярно дори ако предадем TIMESTAMP
стойност:
SELECT LAST_DAY(TIMESTAMP '2036-07-15 15:30:45.12345')
FROM DUAL;
Резултат:
31-JUL-36
Текущ месец
Този пример получава последния ден от текущия месец:
SELECT
SYSDATE,
LAST_DAY(SYSDATE)
FROM DUAL;
Резултат:
SYSDATE | LAST_DAY(SYSDATE) |
---|---|
12 април 22 | 30-APR-22 |
В този случай използвах SYSDATE
за текущата дата.
Следващия месец
Можем да използваме ADD_MONTHS()
функция за добавяне на един или повече месеца към текущата дата:
SELECT
SYSDATE,
LAST_DAY(ADD_MONTHS(SYSDATE, 1))
FROM DUAL;
Резултат:
SYSDATE | LAST_DAY(ADD_MONTHS(SYSDATE,1)) |
---|---|
12 април 22 | 31-22 МАЙ |
В този случай имаме последния ден на следващия месец.
Последният месец
Можем да добавим отрицателна стойност, за да получим последния ден от предходния месец:
SELECT
SYSDATE,
LAST_DAY(ADD_MONTHS(SYSDATE, -1))
FROM DUAL;
Резултат:
SYSDATE | LAST_DAY(ADD_MONTHS(SYSDATE,-1)) |
---|---|
12 април 22 | 31-Мар-22 |