oralce sql 创建指定时间段内的日历信息

-- 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;

时间: 2024-11-05 14:53:33

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

hadoop中的hive查询cdn访问日志指定时间段内url访问次数最多的前10位(结合python语言)

hadoop环境描述: master节点:node1 slave节点:node2,node3,node4 远端服务器(python连接hive):node29 需求:通过hive查询到cdn日志中指定时间段内url访问次数最多的前10个url ps:用pig查询可以查询文章: http://shineforever.blog.51cto.com/1429204/1571124 说明:python操作远程操作需要使用Thrift接口: hive源码包下面自带Thrift插件: [[email pr

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

原创作品,出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46908843 在一篇文章上看到"提出过可以创建指定的数据类型",于是想尝试着创建一下看看. 但是没有按预想的那样成功~~ create  type   MyName  as  object  (first  varchar2(20),second  varchar2(20) ); create  table

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

#!/bin/bash#20170905 输入参数格式echo "显示"$1"的备份文件"date_0=$1date_1=`expr $date_0 + 1`date_2=`expr $date_0 + 2` #定义时间段 touch -d $date_0 /tmp/tm-0.file #开始时间touch -d $date_1 /tmp/tm-1.file #结束时间1touch -d $date_2 /tmp/tm-2.file #结束时间2 datadir=/

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

[摘要]有的时候,我们需要查询数据库某段时间之间的数据,比如2016年5月1号到到5月3号之间用户注册数量(特殊节假日期间)等.那么用SQL语句如何实现呢? 首先,数据表中的存时间的字段比如是addtime可能是时间戳(varchar),也可能是用timestamp类型表示,如果是时间戳格式当然好办,如果是timestamp格式:YYYY-MM-DD HH:II:SS这个格式,如2016-05-01 00:00:00这种格式的SQL语句怎么表示?有下面两张方式: (1)第一种方法,使用关键字be

SQL查询某个时间段内的8-9点的数据

select datename(HOUR,rd.SignTime) 使用这个SQL函数就能查找到rd.SignTime的小时为多少 使用: SELECT * FROM table rd WHERE (select datename(HOUR,rd.SignTime))=8 则可以查询到  8:00:00-8:59:59的数据(就是 小时 为  8 的 时间)

Sql查询指定期限内信息

3天前的所有数据:SELECT * FROM 表名 WHERE DATEDIFF(dd,datetime类型字段,getdate())=3: 今天的所有数据:SELECT * FROM 表名 WHERE DATEDIFF(dd,datetime类型字段,getdate())=0: 昨天的所有数据:SELECT * FROM 表名 WHERE DATEDIFF(dd,datetime类型字段,getdate())=1: 7天内的所有数据:SELECT * FROM 表名 WHERE DATEDIF

SQL Server 查询时间段内数据

方式一: ALTER Proc [dbo].[usp_Rpt_AcctTypeAudit] @FromDate datetime=null, -- yyyy-mm-dd (may change in the future!) @ToDate datetime=null, -- yyyy-mm-dd (may change in the future!) @UserID nvarchar(50) = 'ALL' as BEGIN set nocount on if @ToDate is not n

统计指定时间段内生日的用户

DECLARE @startTime datetime, @endTime datetimeSELECT @dt1='2018-03-01',@dt2='2018-03-10' SELECT * FROM  表名WHERE DATEADD(Year,DATEDIFF(Year,birth_date,@dt1),生日字段) BETWEEN @startTime  AND @endTime OR  DATEADD(Year,DATEDIFF(Year,birth_date,@dt2), 生日字段) 

SQL查询出当前服务器时间是否在表T1时间段内,如果有则选择出

表T1 开始 时间         结束时间          09:00:00          12:00:00      14:00:00          17:00:00 查询出当前服务器时间是否在表T1时间段内,如果有则选择出 选出的sql结果集如下,求SQL,  注:SQL2000环境 开始 时间         结束时间           14:00:00          17:00:00 方法一: DECLARE @t TABLE (     beginTime CHAR(