Sql 如何查找Oracle上个月的天数?
如何在Oracle中查找上个月的天数您正在查找此信息吗Sql 如何查找Oracle上个月的天数?,sql,oracle,Sql,Oracle,如何在Oracle中查找上个月的天数您正在查找此信息吗 SELECT 1 + LAST_DAY(ADD_MONTHS(trunc(SYSDATE), -1)) - TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM') from dual; 31 您可以使用trunc(sysdate,'MM')获取当前月份的第一天,然后减去一个月以获取上个月的第一天;然后使用last_day()获取当月的最后一天;然后extract()从中提取天数: select extract(day
SELECT 1 + LAST_DAY(ADD_MONTHS(trunc(SYSDATE), -1)) - TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM')
from dual;
31
您可以使用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
您也可以使用减法间隔,但是您确实需要首先截断当前日期,因为如果上个月的天数较少,则这与月末的日期不同:
select extract(day from last_day(trunc(sysdate, 'MM') - interval '1' month))
from dual;
trunc(sysdate)
是多余的,不是吗?@GordonLinoff-是的,我想是这样;直到最后一天,它保持时间,但摘录忽略了这一点。(我认为需要一个月一个月,因为某些日期的间隔减法出错,忘记了add\u months()
更为宽容……)
select extract(day from last_day(trunc(sysdate, 'MM') - interval '1' month))
from dual;