Как узнать количество дней в предыдущем месяце в Oracle? - PullRequest
0 голосов
/ 09 апреля 2019

Как узнать количество дней в предыдущем месяце в Oracle

Ответы [ 2 ]

2 голосов
/ 09 апреля 2019

Вы можете получить первый день текущего месяца с trunc(sysdate, 'MM'), затем вычесть месяц, чтобы получить первый день предыдущего месяца; затем используйте last_day(), чтобы получить последний день этого месяца; затем extract() номер дня от этого:

select extract(day from last_day(add_months(trunc(sysdate, 'MM'), -1)))
from dual;

EXTRACT(DAYFROMLAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'MM'),-1)))
------------------------------------------------------------
                                                          31

Главным образом, просто для удовольствия, вы можете увидеть числа, получаемые, скажем, за последние шесть месяцев, с помощью иерархического запроса:

select last_day(add_months(trunc(sysdate, 'MM'), - level)) as last_date,
  extract(day from last_day(add_months(trunc(sysdate, 'MM'), - level))) as last_day_number
from dual
connect by level <= 6;

LAST_DATE  LAST_DAY_NUMBER
---------- ---------------
2019-03-31              31
2019-02-28              28
2019-01-31              31
2018-12-31              31
2018-11-30              30
2018-10-31              31

Как отметил @GordonLinoff, вызов trunc() немного избыточен - потому что add_months() довольно простителен, так что вы можете упростить далее:

select extract(day from last_day(add_months(sysdate, -1)))
from dual;

Вместо этого вы также можете использовать вычитание интервала, но тогда вам сначала нужно урезать текущую дату, так как это не понравится датам в конце месяца, если в предыдущем месяце меньше дней:

select extract(day from last_day(trunc(sysdate, 'MM') - interval '1' month))
from dual;
1 голос
/ 09 апреля 2019

Вы ищете это?

SELECT 1 + LAST_DAY(ADD_MONTHS(trunc(SYSDATE), -1)) - TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM')
from dual;

31
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...