甲骨文下个季度的第一天

Posted

技术标签:

【中文标题】甲骨文下个季度的第一天【英文标题】: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

【问题讨论】:

【参考方案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>

【讨论】:

以上是关于甲骨文下个季度的第一天的主要内容,如果未能解决你的问题,请参考以下文章

php求当前季度的第一天和最后一天

获取当前季度的第一天

pandas通过DatetimeProperties对象获取日期对象是否是所在季度的第一天(is quarter start)筛选dataframe数据中日期对象是所在季度第一天的数据行

记录自己博客园的第一天

将日期取整到下个月的第一天

pandas通过DatetimeProperties对象获取日期对象是否是所在季度的第一天(is quarter start)