如何查找上个月在Oracle中的天数
答案 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