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