請幫助我根據給定年份中的任何日期查找下一個季度。例如,一月到三月的任何日期都將生成同年四月的第一天。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。
uj5u.com熱心網友回復:
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()截斷為作為第二個引數給出的日期時間元素(年、季度、月、日、小時、分鐘等);默認為“天”,并且q是q uarter。
add_months(),顯然,增加了幾個月。
uj5u.com熱心網友回復:
看起來有點像日期算術。
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>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/392590.html
