甲骨文下个季度的第一天
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>
【讨论】:
以上是关于甲骨文下个季度的第一天的主要内容,如果未能解决你的问题,请参考以下文章
pandas通过DatetimeProperties对象获取日期对象是否是所在季度的第一天(is quarter start)筛选dataframe数据中日期对象是所在季度第一天的数据行
pandas通过DatetimeProperties对象获取日期对象是否是所在季度的第一天(is quarter start)