




免费预览已结束,剩余4页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Superromeo原创文档在使用ORACLE的过程中,可能需要判断某一天是某个月的第几周,某一天是某一年的第几周。本人使用自定义函数,调用ORACLE存储过程创建时间维表,解决了该问题。首先,在数据库内创建维度表的表结构。建表语句如下:CREATE TABLE TIME_DIM( DAY_KEY CHAR(8) NOT NULL, DAY_DATE DATE, DAY_YEAR CHAR(4), DAY_QUARTER CHAR(1), DAY_MONTH CHAR(2), WEEK_INMONTH CHAR(1), WEEK_INYEAR CHAR(2), DAY_INMONTH CHAR(2) )TABLESPACE USERSPCTUSED 0PCTFREE 10INITRANS 1MAXTRANS 255STORAGE ( INITIAL 64K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT )LOGGING NOCOMPRESS NOCACHENOPARALLELMONITORING;comment on table TIME_DIM is 时间维表;comment on column TIME_DIM.DAY_KEY is 时间;comment on column TIME_DIM.DAY_DATE is 日期;comment on column TIME_DIM.DAY_YEAR is 年份;comment on column TIME_DIM.DAY_QUARTER is 季度;comment on column TIME_DIM.DAY_MONTH is 月份;comment on column TIME_DIM.WEEK_INMONTH is 月份的第几周;comment on column TIME_DIM.WEEK_INYEAR is 年份的第几周;comment on column TIME_DIM.DAY_INMONTH is 日;接着,定义函数get_week_month,用于计算某一日期在当月的第几周,定义如下:create or replace function get_week_month(date1 in CHAR) return integer is result integer; startday char(8); xingqi char(9); /* 本月第一天是星期几 */ week_num number; /* 本月的第一周一共有几天 */ day_num number; /* date1是这个月的第几天 */ day_num2 number;begin if substr(date1,7,2)=01 then result:=1; else startday:=substr(date1,1,6)|01; select to_char(to_date(startday,yyyymmdd),day) into xingqi from dual; select (case xingqi when 星期一 then 7 when 星期二 then 6 when 星期三 then 5 when 星期四 then 4 when 星期五 then 3 when 星期六 then 2 when 星期日 then 1 end ) into week_num from dual; select to_date(date1,yyyymmdd)-to_date(startday,yyyymmdd)+1 into day_num from dual; if day_num=week_num then result:=1; else day_num2:=day_num-week_num; select ceil(day_num2/7)+1 into result from dual; end if; end if; return(result); end;接着,定义函数get_week_year,用于计算某一日期在当年的第几周,定义如下:create or replace function get_week_year(date1 in CHAR) return integer is result integer; startday char(8); xingqi char(9); /* 本年第一天是星期几 */ week_num number; /* 本年的第一周一共有几天 */ day_num number; /* date1是本年的第几天 */ day_num2 number;begin if substr(date1,5,4)=0101 then result:=1; else startday:=substr(date1,1,4)|0101; select to_char(to_date(startday,yyyymmdd),day) into xingqi from dual; select (case xingqi when 星期一 then 7 when 星期二 then 6 when 星期三 then 5 when 星期四 then 4 when 星期五 then 3 when 星期六 then 2 when 星期日 then 1 end ) into week_num from dual; select to_date(date1,yyyymmdd)-to_date(startday,yyyymmdd)+1 into day_num from dual; if day_num=0 ) loop INSERT INTO TIME_DIM (DAY_KEY, DAY_DATE, DAY_YEAR, DAY_QUARTER, DAY_MONTH, WEEK_INMONTH, WEEK_INYEAR, DAY_INMONTH ) select DATE_CODE as DAY_KEY, to_date(DATE_CODE,yyyymmdd) AS DAY_DATE, substr(DATE_CODE,1,4) AS DAY_YEAR, to_char(to_date(DATE_CODE,yyyymmdd),q) AS DAY_QUARTER, substr(DATE_CODE,5,2) AS DAY_MONTH, get_week_month(DATE_CODE) AS WEEK_INMONTH, get_week_year(DATE_CODE) AS WEEK_INYEAR, substr(DATE_CODE,7,2) AS DAY_INMONTH from dual; commit; DATE_CODE := TO_CHAR(TO_DATE(DATE_CODE, yyyymmdd) + 1, yyyymmdd); end loop; EXCEPTION WHEN OTHERS T
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西省“三新”协同教研共同体2024-2025学年高一上学期12月月考历史试卷(含答案)
- 联合体投标协议书
- 河北石家庄市正中实验中学2024-2025学年高一上学期第一次月考思想政治试卷(含答案)
- 学校运动会部署会上校长讲话-:抓实筹备每一环保障安全每一步成就健康每一人
- 2025秋第二次教学工作推进会上,校长讲话:提质增效,要真抓实做-教学推进会上校长六项发言要点
- 应城交警安全培训中心课件
- 巡察谈话课件
- 岩石变化课件
- 尾矿库安全检查培训课件
- 输液港与PICC的区别
- 质量分析工具-5W1H分析法课件
- 《运动与位置》(31张)-完整版课件
- 五年级上册数学课件-2.1 轴对称 ︳青岛版 (共17张PPT)
- GJB9001C-2017质量管理体系检查内容的内部审核检查表【含检查内容】
- 半导体数字集成电路测试技术概要
- 心包积液以及心包填塞
- 商业银行内部审计技术与方法
- 河道清淤整治工程施工组织设计方案
- 论信息技术对公共行政的影响分析研究行政管理专业
- 技术部薪资等级晋升制度76799
- 生物化学:第2章 核酸的结构与功能
评论
0/150
提交评论