四分之一的月份序列号

时间:2017-04-06 14:47:07

标签: database oracle

我想通过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;

2 个答案:

答案 0 :(得分:2)

这将为您提供1-3的数值,表示季度内的值:

select.simple-control:disabled{
         /*For FireFox*/
        -webkit-appearance: none;
        /*For Chrome*/
        -moz-appearance: none;
}

/*For IE10+*/
select:disabled.simple-control::-ms-expand {
        display: none;
}

它使用模数(mod)函数从0到2得到一个值。然后将0转换为3,因为你想要3月,6月,9月和12月为3而不是0。

答案 1 :(得分:1)

数字上第一个月是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