【问题标题】:Oracle First Day of Next Quarter甲骨文下个季度的第一天
【发布时间】:2022-01-24 00:42:13
【问题描述】:

请帮助我根据给定年份内的任何日期找到下一个季度。例如,从 1 月到 3 月的任何日期都将产生同年 4 月的第一天。从 10 月到 12 月的任何一天都将导致次年 1 月的第一天。在下面的示例中,我返回的是季度的数值,但我想将数值替换为下一季度的第一天:

SELECT CASE
         WHEN TO_CHAR(sysdate, 'mm') IN (1, 2, 3) THEN
          1
         WHEN TO_CHAR(sysdate, 'mm') IN (4, 5, 6) THEN
          2
         WHEN TO_CHAR(sysdate, 'mm') IN (7, 8, 9) THEN
          3
         WHEN TO_CHAR(sysdate, 'mm') IN (10, 11, 12) THEN
          4
       END AS "Quarter"
  FROM dual   

所以,今天的日期是12/21/2021,所以我想返回1/1/2022

【问题讨论】:

    标签: sql oracle date


    【解决方案1】:
    select to_char(sysdate, 'q')              as quarter_number,
           trunc(sysdate, 'q')                as first_day_this_quarter,
           add_months(trunc(sysdate, 'q'), 3) as first_day_next_quarter
    from   dual
    ;
    
    QUARTER_NUMBER   FIRST_DAY_THIS_QUARTER   FIRST_DAY_NEXT_QUARTER
    --------------   ----------------------   ----------------------
    4                01-OCT-2021              01-JAN-2022
    

    trunc() 截断作为第二个参数(年、季度、月、日、小时、分钟等)给出的日期时间元素;默认为“day”,q 用于quarter。

    add_months(),显然增加了几个月。

    【讨论】:

    • 太漂亮了!太感谢了。我正在努力解决它。我需要熟悉 Oracle 日期。节日快乐!!!
    【解决方案2】:

    看起来有点像日期算术。

    SQL> alter session set nls_date_format = 'dd.mm.yyyy';
    
    Session altered.
    
    SQL> with test (datum) as
      2    (select date '2021-01-13' from dual union all
      3     select date '2021-05-23' from dual union all
      4     select date '2021-08-05' from dual union all
      5     select date '2021-11-11' from dual union all
      6     --
      7     select trunc(sysdate)    from dual            --> today
      8    )
      9  select datum,
     10    to_char(datum, 'q') quarter,
     11    add_months(trunc(datum, 'yyyy'), to_number(to_char(datum, 'q')) * 3) q_datum
     12  from test
     13  order by datum;
    
    DATUM      Q Q_DATUM
    ---------- - ----------
    13.01.2021 1 01.04.2021
    23.05.2021 2 01.07.2021
    05.08.2021 3 01.10.2021
    11.11.2021 4 01.01.2022
    22.12.2021 4 01.01.2022            --> today
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多