注意:下面的sql複製後如果在PLSQL中用,如果報ORA-00911的錯誤,需要將所有的空格刪掉再手動加上。
--查詢本月數據(整月)
select * from 表 where 列>=TRUNC(SYSDATE, 'MM') and 列<=last_day(SYSDATE);
--查詢上個月數據(整月)
SELECT * FROM 表 WHERE TO_CHAR(列,'YYYY-MM')=TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM');
--查詢上季度所有月份
SELECT TO_CHAR(ADD_MONTHS(ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'),A * 3),-ROWNUM),'YYYY-MM') LAST_Q FROM (SELECT TO_CHAR(SYSDATE,'Q')-1 A FROM DUAL)
CONNECT BY ROWNUM <=3 ORDER BY 1;
--本季度所有月份
SELECT TO_CHAR(ADD_MONTHS(ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'),A * 3),-ROWNUM),'YYYY-MM') LAST_Q FROM (SELECT TO_CHAR(SYSDATE,'Q') A FROM DUAL) CONNECT BY ROWNUM <= 3 ORDER BY 1;
--本季度的數據量
select count(*) from 表 where to_char(列,'q')=(SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL)
and to_char(列,'yyyy')=to_char(sysdate,'yyyy');
--上個季度的數據量
SELECT count(*) FROM 表 WHERE TO_CHAR(列,'YYYY-MM') in (SELECT TO_CHAR(ADD_MONTHS(ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'),A * 3),-ROWNUM),'YYYY-MM') FROM (SELECT TO_CHAR(SYSDATE,'Q')-1 A FROM DUAL) CONNECT BY ROWNUM <= 3 )
--本年(整年算)
select * from 表 where to_char(列,'yyyy')=to_char(sysdate,'yyyy');
--去年(整年算)
select * from 表 where to_char(列,'yyyy')= to_char(ADD_MONTHS(sysdate, -12),'yyyy');
--返回當前是今年的第幾季度
SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL;
--獲取去年今天,今年,明年今天的時間節點
SELECT ADD_MONTHS(sysdate, -12) as 去年的今天,ADD_MONTHS(sysdate, 12) as 今天,ADD_MONTHS(sysdate, +12) as 明年的今天 FROM dual;
--獲取某一年的所有月份的數據(沒有的月份數據用0補充)(全部複製,只修改表和列就可以執行)
with temps as (select lpad(level, 2, 0) as mon from dual connect by level < 13)
select decode(t.mon,'01','一月','02','二月','03','三月','04','四月','05','五月','06','六月','07','七月','08','八月','09','九月','10','十月','11','十一月','12','十二月') as mon,
count(to_char(t1.列, 'yyyy-mm')) as num from temps t left join 表 t1
on t.mon = to_char(t1.列, 'mm') and to_char(t1.列(+), 'yyyy') ='2020'
group by t.mon order by t.mon