`

mysql生成日期维度表sql

 
阅读更多
CREATE TABLE `dim_day` (
  `DAY_ID` varchar(10) NOT NULL,
  `DAY_SHORT_DESC` varchar(14) DEFAULT NULL,
  `DAY_LONG_DESC` varchar(100) DEFAULT NULL,
  `WEEK_ID` varchar(100) DEFAULT NULL,
  `WEEK_LONG_DESC` varchar(100) DEFAULT NULL,
  `MONTH_ID` varchar(100) DEFAULT NULL,
  `MONTH_SHORT_DESC` varchar(100) DEFAULT NULL,
  `MONTH_LONG_DESC` varchar(100) DEFAULT NULL,
  `QUARTER_ID` varchar(100) DEFAULT NULL,
  `QUARTER_LONG_DESC` varchar(100) DEFAULT NULL,
  `YEAR_ID` varchar(100) DEFAULT NULL,
  `YEAR_LONG_DESC` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`DAY_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

drop procedure if exists f_dim_day;  
create procedure f_dim_day(in start_date VARCHAR(20),in date_count int)
begin  
declare i int;  
set i=0;  
DELETE from dim_day;  
while i < date_count do  
INSERT into dim_day  
(DAY_ID,DAY_SHORT_DESC,DAY_LONG_DESC,WEEK_ID,WEEK_LONG_DESC,MONTH_ID,MONTH_SHORT_DESC,MONTH_LONG_DESC,QUARTER_ID,QUARTER_LONG_DESC,YEAR_ID,YEAR_LONG_DESC)  
SELECT  
REPLACE(start_date,'-','') DAY_ID,  
DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y-%m-%d') DAY_SHORT_DESC,  
DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y年%m月%d日') DAY_LONG_DESC,  
DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y%u') WEEK_ID,  
DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y年第%u周') WEEK_LONG_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_SHORT_DESC,  
DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y年第%m月') MONTH_LONG_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,  
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_LONG_DESC,  
DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y') YEAR_ID,  
DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y年') YEAR_LONG_DESC  
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');  
end while;  
end;  
  
call f_dim_day('2018-01-01',365); 






方法二:
DROP PROCEDURE IF EXISTS getAllDate; 
CREATE PROCEDURE getAllDate()
BEGIN
    DECLARE count int default 0;
    DECLARE startDay DATE DEFAULT date(now());
    DECLARE endDay DATE DEFAULT DATE(NOW());
    -- 定义异常处理方式  http://www.cnblogs.com/cookiehu/p/4994278.html
    DECLARE out_status VARCHAR(200) DEFAULT 'OK';
    DECLARE CONTINUE HANDLER  
    FOR 1062
    SET out_status='Duplicate Entry';
    -- 异常处理方式完毕
    WHILE count<3650 DO
		-- 插入后一百年时间
            INSERT INTO `dim_date`(`id`, `key`, `year`, `quarter`, `month`, `week`, `weekofyear`, `day`, `dayofyear`) VALUES (cast(DATE_FORMAT(startDay,'%Y%m%d') as UNSIGNED), startDay, 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(now()),INTERVAL count DAY);
            SET endDay = DATE_SUB(DATE(NOW()),INTERVAL count DAY);
		-- 插入前一百年时间
            INSERT INTO `dim_date`(`id`, `key`, `year`, `quarter`, `month`, `week`, `weekofyear`, `day`, `dayofyear`) VALUES (cast(DATE_FORMAT(endDay,'%Y%m%d') as UNSIGNED), endDay, YEAR(endDay), QUARTER(endDay), MONTH(endDay), WEEKDAY(endDay)+1, week(endDay,1), DAY(endDay), DAYOFYEAR(endDay));
    END WHILE;
END;

call getAllDate();



 

分享到:
评论

相关推荐

    数据仓库日期维度表创建存储过程

    数据仓库是一种特殊设计的数据库系统,用于支持企业的决策分析过程,它主要关注...通过这三个文件,我们可以学习到如何在SQL Server、Oracle和MySQL中创建和维护日期维度表,进一步提升我们在数据仓库领域的专业能力。

    生成时间维度表的存储过程

    本文将详细解析“生成时间维度表的存储过程”的核心知识点,包括其设计思路、实现方法以及应用场景。 ### 核心知识点 #### 1. 时间维度表的作用 时间维度表是数据仓库中的一种特殊类型表,它通常包含日期、星期、...

    mysql 统计一天24小时数据默认补0SQL

    1. **创建一个包含过去7天日期的临时表**:类似于创建24小时的时间表,我们可以创建一个包含过去7天日期的临时表。 2. **统计每天的任务创建数量**:从任务表中统计过去7天每天的任务创建数量。 3. **执行左连接...

    SQL动态交叉表,希望对SQL程序员有帮助

    在SQL编程中,动态交叉表查询是一种非常实用的技术,它能够帮助我们以表格形式展示多维度数据,使得数据更易理解和分析。交叉表,又称作透视表或转置表,通常用于将行与列的数据位置互换,或者将某一列的数据作为新...

    一个进销存数据库设计的例子含SQL语句

    总结来说,进销存数据库设计涉及对商品、供应商、采购、库存、销售和客户等多个维度的数据管理,通过SQL语句实现数据的存储、操作和查询。理解并熟练运用SQL语句是构建高效进销存系统的关键。在实际开发中,还需要...

    数据仓库建模 Powerdesigner 维度建模 软件分析 建模 视频教程

    - **多平台支持**: 支持多种数据库平台,如Oracle、SQL Server、MySQL等。 #### 七、案例分析 假设某零售企业希望构建一个数据仓库来分析销售数据。首先,需要明确需求,比如需要哪些维度(时间、商品类别、地区等...

    foodmart_mysql.tar.gz

    在实际应用中,"foodmart_mysql.sql"脚本可以支持快速生成各种业务报告,比如商品销售分析、销售额按地区分布、库存周转率等。通过Mondrian的性能优化特性,如预计算、缓存策略等,可以显著提升查询效率,满足实时...

    PivotTable:从 MySQL 查询生成和呈现数据透视表

    在MySQL中,虽然直接支持数据透视表的功能相对较弱,但通过结合PHP等编程语言,我们可以实现类似的功能,生成自定义的数据透视报告。 在PHP中,处理来自MySQL数据库的数据并生成数据透视表通常涉及以下步骤: 1. *...

    淘宝分类数据mysql

    导出则可以生成`sql`文件,便于备份或迁移数据。 综上所述,淘宝分类数据MySQL涵盖了数据库设计、SQL语言应用、数据存储、数据安全和分析等多个方面的知识,是理解电商平台数据管理的重要资源。通过深入研究这些...

    mysql 按不同时间维度查询价格平均值

    包含查询近7天价格平均值(当天没数据时显示为0)、近一个月 每隔5天 价格平均值、近6个月 每月价格平均值;...结果集对应生成折线图所需的数据集,每个维度的x轴都会有数据(真实值或0),y轴为价格平均值;

    169集全新MySQL课程 MySQL技能全面探索 MySQL核心特训教程 MySQL零基础实战班视频

    ├─7、课程:SQL进阶使用(上).12、MySQL查询过程.mp4 ├─7、课程:SQL进阶使用(上).13、EXPLAIN语句.mp4 ├─7、课程:SQL进阶使用(上).14、约束详解Primary KEY.mp4 ├─7、课程:SQL进阶使用(上).1、...

    JAVA+SQL实训报告--工资管理系统

    3. **报表生成**:系统应能生成工资单,同时支持按部门、按月等不同维度的统计报表。 4. **权限控制**:不同级别的用户有不同的操作权限,如管理员可以访问所有数据,普通员工只能查看自己的信息。 总结,这个JAVA+...

    如何使用mysql完成excel中的数据生成

    首先,数据生成在Excel中通常是手动输入或导入,而在MySQL中,可以通过SQL语句创建、插入和更新数据。例如,你可以创建一个新的数据表,然后用INSERT语句添加数据,或者UPDATE语句修改已有数据。这使得在大量数据...

    jsp+mysql教学管理系统

    成绩数据可能按学期、科目等维度组织,学生可以在界面上选择查询条件,JSP会根据这些条件动态生成SQL查询,获取并显示结果。 此外,系统的安全性也是一个重要方面。为了保护敏感信息,需要对用户输入进行验证和清理...

    学生档案管理系统C+sql

    3. 数据库连接:在C++中,通过ODBC(Open Database Connectivity)或更具体的MySQL Connector/C++等方式,实现C++程序与SQL数据库的连接和通信。 四、系统功能模块 1. 登录注册:验证管理员或教师的身份,确保系统...

    基于C#和Mysql的学生信息管理系统

    开发过程中,开发者需要熟练掌握C#的控件使用、事件处理和面向对象编程,以及MySQL的表设计、SQL查询和事务处理等技术。 总的来说,基于C#和MySQL的学生信息管理系统是一个典型的前后端分离的应用案例,展示了编程...

    MySQL数据仓库指南.pdf

    - 第4章“维度查询”,通过星型模式的SQL查询实例,展示了维度数据仓库的高效设计。 第二部分是提取、转换和加载(ETL),包含五个章节: - 第5章“源数据提取”讨论不同数据类型的提取方式; - 第6章“导入时间维...

    MySQL交叉表实现分享

    总结来说,通过`SUM(IF())`和`WITH ROLLUP`,我们可以轻松地在MySQL中生成交叉表,这对于分析和展示多维度数据非常有用。这种技术在处理大量数据时能帮助我们快速了解不同类别之间的关系和趋势,是数据库查询中的一...

    php+mysql电子商务网站

    6. **数据库设计**:包括用户表、商品表、订单表、购物车表等,需要合理设计数据库结构,考虑扩展性和性能优化,如使用索引提升查询速度。 7. **安全性**:防止SQL注入,使用预编译语句或参数化查询;XSS防护,对...

Global site tag (gtag.js) - Google Analytics