SELECT TO_CHAR(SYSDATE, 'YYYY-"Q"Q-"M"')
|| (MOD(EXTRACT(MONTH FROM SYSDATE) - 1, 3) + 1) AS "Current Time"
FROM DUAL;
Current Time
-------------------------------------------------
2017-Q2-M1
检查日期范围:
with t as (
select add_months(trunc(sysdate, 'mm'), level - 6) as dt
from dual
connect by level < 20
)
select dt, to_char(dt, 'YYYY-"Q"Q-"M"')
|| (mod(extract(month from dt) - 1, 3) + 1) as "Current Time"
from t;
DT Current Time
---------- -------------------------------------------------
2016-11-01 2016-Q4-M2
2016-12-01 2016-Q4-M3
2017-01-01 2017-Q1-M1
2017-02-01 2017-Q1-M2
2017-03-01 2017-Q1-M3
2017-04-01 2017-Q2-M1
2017-05-01 2017-Q2-M2
2017-06-01 2017-Q2-M3
2017-07-01 2017-Q3-M1
2017-08-01 2017-Q3-M2
2017-09-01 2017-Q3-M3
2017-10-01 2017-Q4-M1
2017-11-01 2017-Q4-M2
2017-12-01 2017-Q4-M3
2018-01-01 2018-Q1-M1
2018-02-01 2018-Q1-M2
2018-03-01 2018-Q1-M3
2018-04-01 2018-Q2-M1
2018-05-01 2018-Q2-M2
2条答案
按热度按时间nafvub8i1#
这将为您提供一个1-3之间的数值,表示季度内的月值:
它使用modulus(mod)函数获取0 - 2之间的值。然后将0转换为3,因为您希望3月,6月,9月和12月为3,而不是0。
vddsk6oq2#
Q1的第一个月是1;Q2中的第一个是4;因此,当前季度的月份是
mod(<month> - 1, 3) + 1
,调整后不会出现零月份(如@GriffeyDog所指出的)。因此,您可以执行以下操作:检查日期范围: