首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Oracle中从日期获取季度时出现问题

问在Oracle中从日期获取季度时出现问题
EN

Stack Overflow用户
提问于 2019-03-24 12:48:35
回答 1查看 75关注 0票数 1

我已经编写了一个查询,通过使用sysdate来获取本年度和上一年的季度开始日期。

例如:今天是第一季度,所以我只想得到去年第一季度和今年第一季度的开始日期。如果我在12月(在第四季度),我希望获得8个季度的开始日期(去年的4个季度,今年的4个季度)。

代码语言:javascript
复制
select b.dt,
       to_number(to_char(SYSDATE, 'Q')),
       to_number(to_char(b.dt, 'Q'))
  from dual a,
       (select add_months(trunc(ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -12),
                                'yyyy'),
                          (rownum - 1) * 3) dt
          from all_objects
         where rownum <= 8
           and add_months(trunc(ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -12),
                                'yyyy'),
                          (rownum - 1) * 3) <= SYSDATE
           and to_number(to_char(SYSDATE, 'Q')) >=
               to_number(to_char(add_months(trunc(ADD_MONTHS(TRUNC(SYSDATE,
                                                                   'MM'),
                                                             -12),
                                                  'yyyy'),
                                            (rownum - 1) * 3),
                                 'Q'))) b

此查询仅返回去年第一季度的开始日期。我也希望得到今年第一季度的开始日期。

​

​

EN

回答 1

Stack Overflow用户

发布于 2019-03-24 13:47:43

这里有一个选项;查看代码中的注释。

代码语言:javascript
复制
SQL> alter session set nls_date_format = 'dd.mm.yyyy';

Session altered.

SQL> with
  2  -- this mimics SYSDATE
  3  today (datum) as
  4    (select date '&date_literal' from dual),
  5  -- which quarter does DATUM belong to? Find 1st day in "this" and "previous" year
  6  quart as
  7    (select trunc(datum, 'yyyy') this,
  8            trunc(add_months(datum, -12), 'yyyy') previous,
  9            to_char(datum, 'q') quart from today)
 10  -- the fina result
 11  select add_months(this, (level - 1) * 3) result
 12  from quart
 13  connect by level <= quart
 14  union all
 15  select add_months(previous, (level - 1) * 3) result
 16  from quart
 17  connect by level <= quart;
Enter value for date_literal: 2019-03-24

RESULT
----------
01.01.2019
01.01.2018

SQL> /
Enter value for date_literal: 2019-08-13

RESULT
----------
01.01.2019
01.04.2019
01.07.2019
01.01.2018
01.04.2018
01.07.2018

6 rows selected.

SQL>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55320819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档