Mysql建立日期維度碼表

2021-10-11 04:17:41 字數 3631 閱讀 7162

建立日期維度表

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