oracle 季度中的月份序号

lndjwyie  于 2023-03-29  发布在  Oracle
关注(0)|答案(2)|浏览(157)

我想通过sql确定其季度中的月份序号
我发现这段代码,但一周:

SELECT TO_CHAR( SYSDATE, 'YYYY-"Q"Q-"W"' )
     || ( 7 + TRUNC( SYSDATE + 1, 'IW' ) - TRUNC( TRUNC( SYSDATE, 'Q' ) + 1, 'IW' ) ) / 7
         AS "Current Time"
FROM DUAL;
nafvub8i

nafvub8i1#

这将为您提供一个1-3之间的数值,表示季度内的月值:

select case mod(to_number(to_char(sysdate, 'MM')), 3)
         when 0 then 3
         when 1 then 1
         when 2 then 2
       end as month_in_quarter
  from dual;

它使用modulus(mod)函数获取0 - 2之间的值。然后将0转换为3,因为您希望3月,6月,9月和12月为3,而不是0。

vddsk6oq

vddsk6oq2#

Q1的第一个月是1;Q2中的第一个是4;因此,当前季度的月份是mod(<month> - 1, 3) + 1,调整后不会出现零月份(如@GriffeyDog所指出的)。因此,您可以执行以下操作:

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

相关问题