關於時間段查詢的sql整理(oracle)

注意:下面的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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章