-- Create table

create table TEMP_CALENDAR

(

  MONTH VARCHAR2(6),

  W_7   VARCHAR2(2),

  W_1   VARCHAR2(2),

  W_2   VARCHAR2(2),

  W_3   VARCHAR2(2),

  W_4   VARCHAR2(2),

  W_5   VARCHAR2(2),

  W_6   VARCHAR2(2),

  WEEK  VARCHAR2(20)

) ;

-- Add comments to the table 

comment on table TEMP_CALENDAR

  is '日期源数据表';

-- Add comments to the columns 

comment on column TEMP_CALENDAR.MONTH

  is '月份(格式如:200801)';

comment on column TEMP_CALENDAR.W_7

  is '周日的日期(如:06)';

comment on column TEMP_CALENDAR.W_1

  is '周一(如:07)';

comment on column TEMP_CALENDAR.W_2

  is '周二(如:08)';

comment on column TEMP_CALENDAR.W_3

  is '周三(如:09)';

comment on column TEMP_CALENDAR.W_4

  is '周四(如:10)';

comment on column TEMP_CALENDAR.W_5

  is '周五(如:11)';

comment on column TEMP_CALENDAR.W_6

  is '周六(如:12)';

comment on column TEMP_CALENDAR.WEEK

  is '本月第几周';

----生成 日历信息 

-- truncate table calendar; 

declare 





    vi_begin_year number(6); 

    vi_end_year number(6); 

    vi_year number(6); 

    vi_month number(6); 

    vs_month varchar2(6); 

    vs_first_day varchar2(8); 









begin 





    vi_begin_year :=2000; ---start year

    vi_end_year :=2100;   --- end year

    vi_month :=1; 

    vi_year := vi_begin_year; 





loop exit when(vi_year > vi_end_year);

 for i in 1..12 loop 

     if length(i) =1 then 

        vs_month := to_char(vi_year)||'0'||to_char(i); 

     else

         vs_month := to_char(vi_year)||to_char(i); 

     end if;

     

  vs_first_day := vs_month||'01'; 

  

  insert into temp_calendar ( month, week,w_7, w_1, w_2, w_3, w_4, w_5, w_6 ) 

  

  select substr(vs_first_day,1,6) month, 

  ceil((to_char(everyday,'dd')+(to_char(to_date(vs_first_day,'yyyymmdd'),'d')-1))/7) as week, 

  sum(decode(to_char(everyday,'dy'),'星期日',to_char(everyday,'dd'))) as 星期日, 

  sum(decode(to_char(everyday,'dy'),'星期一',to_char(everyday,'dd'))) as 星期一, 

  sum(decode(to_char(everyday,'dy'),'星期二',to_char(everyday,'dd'))) as 星期二, 

  sum(decode(to_char(everyday,'dy'),'星期三',to_char(everyday,'dd'))) as 星期三, 

  sum(decode(to_char(everyday,'dy'),'星期四',to_char(everyday,'dd'))) as 星期四, 

  sum(decode(to_char(everyday,'dy'),'星期五',to_char(everyday,'dd'))) as 星期五, 

  sum(decode(to_char(everyday,'dy'),'星期六',to_char(everyday,'dd'))) as 星期六 

  from(

    select to_date(vs_first_day,'yyyymmdd') + level - 1 as everyDay 

    from dual 

    connect by level <= (last_day(to_date(vs_first_day,'yyyymmdd')) 

    - to_date(vs_first_day,'yyyymmdd') +1) ) 

  group by ceil((to_char(everyday,'dd')+(to_char(to_date(vs_first_day,'yyyymmdd'),'d')-1))/7) ; 

  

  

  commit; 

  

  end loop; 

  

  vi_year := vi_year+1; 

  

end loop; 

  

  end;

  order by a.year,a.month, a.week;

oralce sql 创建指定时间段内的日历信息的更多相关文章

  1. sql取指定时间段内的所有月份

    declare @begin datetime,@end datetime set @begin='2017-01-01' set @end='2019-03-04' declare @months ...

  2. sqlServer通过指定的起始时间,创建该时间段内以年、月、日为时间段的临时表

    通过指定的起始时间,创建该时间段内以年.月.日为时间段的临时表 ALTER PROCEDURE [dbo].[YOUR_SP_Name]     -- Add the parameters for t ...

  3. 趣味SQL——创建指定的数据类型

    原创作品,出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46908843 趣味 ...

  4. SQL Server备份时间段内插入的数据依旧进入了备份文件?(转载)

    问 MSSql我在本机测试了下.为了延长备份时间,找个大的数据库.开始完整备份bak然后再此库新建表,并增添数据.备份结束.==================还原备份后,在还原的数据库内发现新增的表 ...

  5. shell查找指定时间段内的文件

    #!/bin/bash#20170905 输入参数格式echo "显示"$1"的备份文件"date_0=$1date_1=`expr $date_0 + 1`d ...

  6. SQL Server中获取指定时间段内的所有日期

    DECLARE @days INT, @date_start DATETIME = '2016-11-01', @date_end DATETIME = '2016-11-10' SET @days ...

  7. 数据库SQL语句查询指定时间段内的数据

    [摘要]有的时候,我们需要查询数据库某段时间之间的数据,比如2016年5月1号到到5月3号之间用户注册数量(特殊节假日期间)等.那么用SQL语句如何实现呢? 首先,数据表中的存时间的字段比如是addt ...

  8. SQL Server中获取指定时间段内的所有月份

    例如查询 2012-1-5 到 2012-11-3 之间所有的月份 declare @begin datetime,@end datetime set @begin='2012-1-5' set @e ...

  9. SQL Server 查询时间段内数据

    方式一: ALTER Proc [dbo].[usp_Rpt_AcctTypeAudit] @FromDate datetime=null, -- yyyy-mm-dd (may change in ...

随机推荐

  1. 延时提示框制作思路[简单javascript案例]

    模拟QQ软件中的弹出提示框功能,制作一个简易的延时提示框. 功能实现: 1.当鼠标移入指定区块时,弹出隐藏的区块:当鼠标移出指定区块时,弹出的隐藏区块再次隐藏. 2.同时要求在鼠标移入该弹出区块后,区 ...

  2. 快速搭建ELK集中化日志管理平台

    由于我们的项目是分布式,服务分布于多个服务器上,每次查看日志都要登录不同服务器查看,而且查看起来还比较麻烦,老大让搭一个集中化日志管理的东西,然后就在网上找到了这个东西ELK ELK就是elastic ...

  3. Oracle占用内存过高解决办法

    1.cmd sqlplus system账户登录 2.show parameter sga; --显示内存分配情况 3.alter system set sga_max_size=200m scope ...

  4. Phoenix与Squirrel 是什么?

    不多说,直接上干货! 前言 Phoenix是HBase的开源SQL引擎. squirrel是windows上Phoneix可视化工具.  Phoenix的官网 http://phoenix.apach ...

  5. IOS 监控网络变化案例源码

    随着移动网络升级:2G->3G->4G甚至相传正在研发的5G,网络速度是越来越快,但这流量也像流水一般哗哗的溜走. 网上不是流传一个段子:睡觉忘记关流量,第二天房子就归移动了! 这固然是一 ...

  6. CNN结构:用于检测的CNN结构进化-一站式方法

    有兴趣查看原文:YOLO详解 人眼能够快速的检测和识别视野内的物体,基于Maar的视觉理论,视觉先识别出局部显著性的区块比如边缘和角点,然后综合这些信息完成整体描述,人眼逆向工程最相像的是DPM模型. ...

  7. VTK:VTK嵌入MFC成功

    VTK作为医学显示库,得到较多使用.作为较为上层的设计,对OpenGL进行了封装,并且有Windows.Linux.安卓等开发版本,可移植性较强. 不过VES暂时没有编译成功. 以下是嵌入MFC-ID ...

  8. 使用脚本卸载.net framework for mac

    官方只提供了安装包,没提供卸载

  9. <转>c++引用与指针的区别(着重理解)

     ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名.  ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指 ...

  10. Vuex教程简单实例

    什么是Vuex? vuex是一个专门为vue.js设计的集中式状态管理架构.状态?我把它理解为在data中的属性需要共享给其他vue组件使用的部分,就叫做状态.简单的说就是data中需要共用的属性. ...