建立日期維度表
create table `date_dimension` (
`date_id` int(8) not null comment '日期id',
`date_format` varchar(20) default null comment '日期格式化',
`curr_day` int(8) default null comment '當前星期幾',
`curr_day_desc` varchar(8) default null comment '當前星期幾',
`week_id` int(8) default null comment '周id',
`curr_week` int(8) default null comment '當前第幾周',
`curr_week_desc` varchar(8) default null comment '當前第幾周',
`month_id` int(8) default null comment '月id',
`month_format` varchar(20) default null comment '月份格式化',
`curr_month` int(8) default null comment '當前月份',
`curr_month_desc` varchar(8) default null comment '當前月份',
`quarter_id` int(8) default null comment '季度id',
`curr_quarter` int(8) default null comment '當前季度',
`year_id` int(8) default null comment '年id',
primary key (`date_id`)
) engine=innodb default charset=utf8 comment='時間維表';
建立函式
create procedure f_date_dimension (
in start_date varchar (20),
in date_count int
)begin
declare
i int;
declare
day_num int;
declare
day_str varchar(4);
set i = 0;
set day_num = 1;
set day_str = '';
delete
from
date_dimension;
while i < date_count do
select dayofweek(date_sub(start_date,interval 1 day)) into day_num from dual;
if day_num = 1 then
set day_str = '一';
elseif day_num = 2 then
set day_str = '二';
elseif day_num = 3 then
set day_str = '三';
elseif day_num = 4 then
set day_str = '四';
elseif day_num = 5 then
set day_str = '五';
elseif day_num = 6 then
set day_str = '六';
elseif day_num = 7 then
set day_str = '日';
end if;
insert into date_dimension (
date_id,
date_format,
curr_day,
curr_day_desc,
week_id,
curr_week,
curr_week_desc,
month_id,
month_format,
curr_month,
curr_month_desc,
quarter_id,
curr_quarter,
year_id
) select
replace(start_date,'-','') date_id,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y-%m-%d') date_format,
day_num curr_day,
day_str curr_day_desc,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%x%v') week_id,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%v') curr_week,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%xw%v') curr_week_desc,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y%m') month_id,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y-%m') month_format,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%m') curr_month,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%ym%m') curr_month_desc,
concat(date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y'),quarter(str_to_date( start_date,'%y-%m-%d %h:%i:%s'))) quarter_id,
quarter(str_to_date(start_date,'%y-%m-%d %h:%i:%s')) curr_quarter,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y') year_id
from dual;
set i = i + 1;
set start_date = date_format(
date_add(
str_to_date(
start_date,
'%y-%m-%d %h:%i:%s'
),interval 1 day
), '%y-%m-%d');
endwhile;
end;
執行函式, 第乙個引數為開始日期,第二個引數為天數。
執行,即可成功。
mysql 建立時間維度表
做系統設計以及涉及資料分析的時候,會涉及到各種期間維度的統計計算。可以按日期生成期間維度表,如下 1.按期間生成日期表 drop table if exists v day create table v day oc date varchar 20 default null 2.呼叫方法為輸入開始結...
5 2 3 SSAS 維度 日期維度
維度 日期維度的建立 1 日期維度 日期維度存在於幾乎所有的cube中,它是最最普遍和最重要的維度之一。要建立日期維度,首先需要建立乙個日期維度表,並編寫填充資料的儲存過程。日期維度表dimdate如下 drop table dimdate create table dimdate datekey ...
oracle日期維度表
查詢日期屬性 select to number to char sysdate,yyyymmdd as id,trunc sysdate as fdate,日期 to char sysdate,yyyy q to char sysdate,q as year quarter,年季度 to char ...