Oracle 日、月、周循环

Oracle SQL实现日、月、周循环
许多业务报表系统都是按日、月、周时间区间统计数据,通常都是通过job调用存储过程实现。
涉及到历史数据跑批时需要实现区间时间段按日、周、月循环。

-- 时间区间按日循环 
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;


-- 时间区间按月循环 
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;


-- 时间区间按周循环 
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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,056评论 2 89
  • select * from tab; sql 分类 ddl 数据定义语言 dml 数据操作语音dcl 数据控制语言...
    雷爷_fefc阅读 752评论 0 0
  • Mysql概述 数据库是一个易于访问和修改的信息集合。它允许使用事务来确保数据的安全性和一致性,并能快速处理百万条...
    彦帧阅读 13,723评论 10 460
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,464评论 0 9
  • ①创建表空间创建用户以及用户授权 (1)创建表空间 --创建表工作空间 create tablespace ith...
    老婆就是要败家阅读 1,234评论 0 0