mysql日期维度生成代码

-- 创建维度表
CREATE TABLE dim_date (
  `id` int(8) NOT NULL DEFAULT '0',
  `key_date` date NOT NULL DEFAULT '0000-00-00',
    `str_date` char(10) NOT NULL DEFAULT '0000-00-00',
  `year` int(4) NOT NULL,
  `quarter` int(1) NOT NULL,
  `month` int(2) NOT NULL,
  `week` int(1) NOT NULL COMMENT '星期',
  `weekofyear` int(2) NOT NULL COMMENT '一年中的第几周',
  `day` int(2) NOT NULL COMMENT '日',
  `dayofyear` int(3) NOT NULL COMMENT '一年总的第几天',
  PRIMARY KEY (`id`)
    )
    
    --  日期维度创建函数
delimiter //
DROP PROCEDURE IF EXISTS getAllDate; 
CREATE PROCEDURE getAllDate()
BEGIN
    DECLARE count1 int default 800;  -- 开始生成日期距今日天数
        DECLARE count2 int default 4000;    -- 截止日期距今天的天数
        DECLARE count int default 0;     -- 控制循环计数变量
        DECLARE startDay DATE ;
        set count = count1*(-1);
        set startDay = DATE_ADD(DATE(now()),INTERVAL count DAY);

  WHILE count<count2 DO
            INSERT INTO `dim_date`(`id`, `key_date`, str_date,`year`, `quarter`, `month`, `week`, `weekofyear`, `day`, `dayofyear`) 
                        VALUES (DATE_FORMAT(startDay,'%Y%m%d'), startDay,DATE_FORMAT(startDay,'%Y-%m-%d'), YEAR(startDay), QUARTER(startDay), MONTH(startDay), WEEKDAY(startDay)+1, week(startDay,1), DAY(startDay), DAYOFYEAR(startDay));
            set count = count +1;
            set startDay = DATE_ADD(DATE(startDay),INTERVAL 1 DAY);
    END WHILE;
END//
delimiter ;

-- 执行函数
call getAllDate();

-- 查询结果 
select * from dim_date order by key_date;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值