oracle:如何用sql生成日历
时间:2022-04-23
本文章向大家介绍oracle:如何用sql生成日历,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
BI分析中,经常需要将事实表与时间维度表关联起来,按年/月/日来逐层展示,常用的做法是创建一张日历表,结构类似如下:
create table T_BAS_CALENDAR
(
d_year NUMBER(4) not null,
d_month NUMBER(2) not null,
d_day NUMBER(2) not null
);
comment on table T_BAS_CALENDAR
is '日历表';
comment on column T_BAS_CALENDAR.d_year
is '年';
comment on column T_BAS_CALENDAR.d_month
is '月';
comment on column T_BAS_CALENDAR.d_day
is '日';
alter table T_BAS_CALENDAR
add constraint PK_BAS_CALENDAR primary key (D_YEAR, D_MONTH, D_DAY);
但是如何向这张表批量插入日历数据,方法就很多了,下面是仅用SQL语言生成日历的参考方法:
1 create or replace procedure P_IMPORT_CALENDAR(p_year_start number,
2 p_year_end number) is
3 cmonth integer;
4 cyear integer;
5 cday integer;
6 day_first integer;
7 day_last integer;
8 begin
9 --生成从p_year_start到p_year_end的所有日历 created by yjmyzz@126.com 2015-04-27
10
11 --firstly,delete history records
12 delete from T_BAS_CALENDAR where d_year between p_year_start and p_year_end;
13 for cyear in p_year_start .. p_year_end loop
14 for cmonth in 1 .. 12 loop
15 --get first-day of Month
16 select to_number(cyear || lpad(cmonth, 2, '0') || '01', '99999999')
17 into day_first
18 from dual;
19 --last-day of Month
20 select to_number(to_char(add_months(to_date(day_first, 'yyyyMMdd'), 1) - 1,
21 'yyyyMMdd'),
22 '99999999')
23 into day_last
24 from dual;
25 for cday in day_first .. day_last loop
26 --insert to table
27 INSERT INTO T_BAS_CALENDAR
28 (D_YEAR, D_MONTH, D_DAY)
29 VALUES
30 (CYEAR, CMONTH, SUBSTR(cday, 7));
31 end loop;
32 end loop;
33 end loop;
34 commit;
35 end P_IMPORT_CALENDAR;
- “熊医生”出诊正确率超九成 医院:人工智能更多是辅助
- PLC编程优化方法,让程序运行提速!
- 这是硅谷狂人马斯克对未来做出的11个大胆预测,人工智能比核武器更危险
- 在腾讯云上使用自建DNS
- Spring 4.0.2 学习笔记(1) - 最基本的注入
- 关于女神SQLite的疑惑(2)
- WordPress纯代码仿无觅相关文章图文模式功能(增强版)
- 人工智能时代已悄然来临……
- 人民日报发布周鸿祎署名文章:迎接“大安全”时代的新威胁
- Mono 3.2 上跑NUnit测试
- 为WordPress 文章中的链接自动添加 nofollow标签
- 腾讯刘炽平:海外用户破7000万 微信带开发者“出海”
- 研究称性别不均衡或导致人工智能持有性别偏见
- ASP.NET 2.0加密Web.config 配置文件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一个基于ngrx的Angular图书搜索应用,带网络请求
- Android利用RecyclerView实现列表倒计时效果
- 【Flutter Unit 重大更新 1 】超好用的组件收藏夹上线
- android特卖列表倒计时卡顿问题的解决方法
- dotnet 多线程禁止同时调用相同的方法 禁止方法重入调用 双检锁的设计
- android实现倒计时功能(开始、暂停、0秒结束)
- 【-Flutter/Dart 语法补遗-】 sync* 和 async* 、yield 和yield* 、async 和 await
- android实现条目倒计时功能
- Android实现简单手电筒功能
- k8s安装自动证书签发cert-manager letsencrypt
- Android仿Keep运动休息倒计时圆形控件
- android通过led实现手电筒功能
- Android 7.0 手电筒控制实现
- 【STM32H7】第13章 RL-TCPnet V7.X之创建多个TCP客户端
- Android倒计时的开始与停止 剩余时分秒的展示