Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
如何在Oracle中获取最近12个月的结束日期_Oracle - Fatal编程技术网

如何在Oracle中获取最近12个月的结束日期

如何在Oracle中获取最近12个月的结束日期,oracle,Oracle,我需要一个查询,在这里我可以从oracle中的当前系统日期获取上一个12个月的结束日期 下面是我在Oracle中使用的示例查询 select trunc(add_months(sysdate,level-1),'MM') first_day, last_day(add_months(sysdate,level-1)) last_day from dual connect by level<=12; 选择 trunc(加上月份(系统日期,1级),'MM')第一天, 最后一天(添

我需要一个查询,在这里我可以从oracle中的当前系统日期获取上一个12个月的结束日期

下面是我在Oracle中使用的示例查询

select
  trunc(add_months(sysdate,level-1),'MM') first_day,
  last_day(add_months(sysdate,level-1)) last_day
  from dual
connect by level<=12;
选择
trunc(加上月份(系统日期,1级),'MM')第一天,
最后一天(添加月份(系统日期,1级))最后一天
来自双重
按级别连接<代码>选择
trunc(加上月份(系统日期numtoyminterval(1,'年'),级别1),'MM')第一天,
最后一天(添加月份(系统日期numtoyminterval(1,'年'),级别1))最后一天
来自双重
按级别连接请尝试以下操作:

    SELECT   TRUNC (ADD_MONTHS (SYSDATE, -(LEVEL - 1)), 'MM') FIRST_DAY,
             LAST_DAY (ADD_MONTHS (SYSDATE, -(LEVEL - 1))) LAST_DAY
      FROM   DUAL
CONNECT BY   LEVEL <= 12;
选择TRUNC(添加月份(系统日期,-(级别-1)),'MM')第一天,
最后一天(加上月份(系统日期,-(级别-1)))最后一天
来自双重

按级别连接您的查询有什么问题?正如我所见,它解决了这个任务,不是吗?这个查询给了我从现在到未来12个月的时间。但我需要过去12个月的时间,只要把你的1级定为负数就行了。从dual connect by level中选择trunc(add_months(sysdate,-1*(level-1)),'MM')first_day,last_day(add_months(sysdate,-1*(level-1)))last_day(add_months(sysdate,-1*(level-1)),除非您也截断第二个表达式,last_day将包括sysdate中的当前时间;例如,第一天2015-04-01 00:00:00和最后一天2015-04-30 09:43:24。除非您的NLS_日期_格式显示的时间不明显,并且可能导致混淆。不管你选择哪一个答案,都需要注意。如果在闰日进行计算,就会失败——因为前一年没有2月29日。您可以通过
从dual
中选择日期'2012-02-29'-numtoyminterval(1,'年')。目前,最后一天是保持当前时间,这可能不是你真正想要的,但我看到OP也这样做。最后一天是保持当前时间,从sysdate开始,这可能不是你真正想要的;虽然OP的版本也这样做。使用TRUNC,问题的作者可以简单地解决问题。哦,是的,只是为了OP的利益指出它,因为除非NLS_DATE_格式显示时间,否则它不会很明显,并且可能会造成奇怪的效果。也许我应该对这个问题发表评论,想想看!
    SELECT   TRUNC (ADD_MONTHS (SYSDATE, -(LEVEL - 1)), 'MM') FIRST_DAY,
             LAST_DAY (ADD_MONTHS (SYSDATE, -(LEVEL - 1))) LAST_DAY
      FROM   DUAL
CONNECT BY   LEVEL <= 12;