Oracle 日、月、周循環(huán)

Oracle SQL實(shí)現(xiàn)日、月、周循環(huán)
許多業(yè)務(wù)報(bào)表系統(tǒng)都是按日、月、周時(shí)間區(qū)間統(tǒng)計(jì)數(shù)據(jù),通常都是通過job調(diào)用存儲(chǔ)過程實(shí)現(xiàn)。
涉及到歷史數(shù)據(jù)跑批時(shí)需要實(shí)現(xiàn)區(qū)間時(shí)間段按日、周、月循環(huán)。

-- 時(shí)間區(qū)間按日循環(huán) 
declare 
  -- Local variables here
  i integer;
  START_TIME DATE:=TO_DATE( '2020-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss');
  END_TIME DATE:=TO_DATE( '2020-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss');
  START_TIME_STR VARCHAR2(20);
  END_TIME_STR VARCHAR2(20);
begin
  -- Test statements here
   while START_TIME < END_TIME  loop
     START_TIME_STR :=to_char(START_TIME,'yyyy-mm-dd')||' 00:00:00';
     END_TIME_STR := to_char(START_TIME,'yyyy-mm-dd')||' 23:59:59';
     DBMS_OUTPUT.PUT_LINE(START_TIME_STR||'    '||END_TIME_STR);
     --DBMS_OUTPUT.PUT_LINE(to_date(START_TIME_STR,'yyyy-mm-dd hh24:mi:ss')||'    '||to_date(END_TIME_STR,'yyyy-mm-dd hh24:mi:ss'));
     START_TIME:= START_TIME + 1;
  end loop;
end;


-- 時(shí)間區(qū)間按月循環(huán) 
declare 
  -- Local variables here
  i integer;
  START_TIME DATE:=TO_DATE( '2019-08-01', 'yyyy-mm-dd');
  END_TIME DATE:=TO_DATE( '2020-10-01', 'yyyy-mm-dd');
  START_TIME_STR VARCHAR2(20);
  END_TIME_STR VARCHAR2(20);
begin
  -- Test statements here
   while START_TIME < END_TIME  loop
     START_TIME_STR :=to_char(trunc(add_months(last_day(START_TIME), -1) + 1), 'yyyy-mm-dd')||' 00:00:00';
     END_TIME_STR := to_char(last_day(START_TIME), 'yyyy-mm-dd')||' 23:59:59';
     DBMS_OUTPUT.PUT_LINE(START_TIME_STR||'    '||END_TIME_STR);
     --DBMS_OUTPUT.PUT_LINE(to_date(START_TIME_STR,'yyyy-mm-dd hh24:mi:ss')||'    '||to_date(END_TIME_STR,'yyyy-mm-dd hh24:mi:ss'));
     START_TIME:= add_months(START_TIME,1);
  end loop;
end;


-- 時(shí)間區(qū)間按周循環(huán) 
declare 
  -- Local variables here
  i integer;
  START_TIME DATE:=TO_DATE( '2019-08-01', 'yyyy-mm-dd');
  END_TIME DATE:=TO_DATE( '2020-10-01', 'yyyy-mm-dd');
  START_TIME_STR VARCHAR2(20);
  END_TIME_STR VARCHAR2(20);
begin
  -- Test statements here
   while START_TIME < END_TIME  loop
     START_TIME_STR :=to_char( trunc(START_TIME,'iw') , 'yyyy-mm-dd')||' 00:00:00';
     END_TIME_STR := to_char( trunc(START_TIME,'iw')+6, 'yyyy-mm-dd')||' 23:59:59';
     DBMS_OUTPUT.PUT_LINE(START_TIME_STR||'    '||END_TIME_STR);
     --DBMS_OUTPUT.PUT_LINE(to_date(START_TIME_STR,'yyyy-mm-dd hh24:mi:ss')||'    '||to_date(END_TIME_STR,'yyyy-mm-dd hh24:mi:ss'));
     START_TIME:= trunc(START_TIME,'iw')+7;
  end loop;
end;
D552281B-56B8-4f2d-B690-845B884A14FD.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,306評(píng)論 2 89
  • select * from tab; sql 分類 ddl 數(shù)據(jù)定義語言 dml 數(shù)據(jù)操作語音dcl 數(shù)據(jù)控制語言...
    雷爺_fefc閱讀 823評(píng)論 0 0
  • Mysql概述 數(shù)據(jù)庫是一個(gè)易于訪問和修改的信息集合。它允許使用事務(wù)來確保數(shù)據(jù)的安全性和一致性,并能快速處理百萬條...
    彥幀閱讀 13,962評(píng)論 10 460
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常。 O...
    我想起個(gè)好名字閱讀 5,974評(píng)論 0 9
  • ①創(chuàng)建表空間創(chuàng)建用戶以及用戶授權(quán) (1)創(chuàng)建表空間 --創(chuàng)建表工作空間 create tablespace ith...
    老婆就是要敗家閱讀 1,276評(píng)論 0 0

友情鏈接更多精彩內(nèi)容