如何查找上个月在Oracle中的天数?

时间:2019-04-09 13:16:17

标签: sql oracle

如何查找上个月在Oracle中的天数

2 个答案:

答案 0 :(得分:2)

您可以使用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 :(得分:1)

您在寻找这个吗?

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

31