Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何查找Oracle上个月的天数?_Sql_Oracle - Fatal编程技术网

Sql 如何查找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

如何在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 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;