mysql 生成日期维表

第一步,创建函数 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;

第二步,调用函数传入开始时间和天数 ,执行如下sql:

call f_dim_day(‘2015-01-01’,365)

生成效果如下:

时间: 2024-10-05 03:29:18

mysql 生成日期维表的相关文章

mysql生成日期的辅助表

为了解决mysql按日期分组查询统计的时候,没有数据补0.可以生成连续的时间表格来辅助查询 CREATE TABLE num (i int);-- 创建一个表用来储存0-9的数字INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);-- 生成0-9的数字,方便以后计算时间 * 生成日期 CREATE TABLE num (i int);-- 创建一个表用来储存0-9的数字 INSERT INTO n

MySQL 生成日期表

1.创建一个num表,用来存储数字0~9 CREATE TABLE num (i int); 2.在num表中生成0~9 INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9); 3.生成一个存储日期的表,datalist是字段名 CREATE TABLE if not exists calendar(datelist date); 4.生成并插入日期数据 INSERT INTO calendar(d

MySQL 按日期分表

一.表不存在时则创建 之前做项目实在是太赶了,很多东西都没记录.是时候补回来了 MySQL做一个大表,由于要存历史记录,所以数据量很大,查询很慢.恰好查询的时候,又不需要时间太久的冷数据.现在将其实现原理提取成一个控制台小程序. 首先,创建一个简单的数据库访问类. public static class CommonDao { private static MySqlConnection conn = new MySqlConnection(ConfigurationManager.AppSet

mysql 日期辅助表

MySQL 生成日期表 #1.创建一个num表,用来存储数字0~9 CREATE TABLE num (i int); #2.在num表中生成0~9 INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9); #3.生成一个存储日期的表,datalist是字段名 CREATE TABLE if not exists calendar(datelist date); #4.生成并插入日期数据 INSERT

利用java日期类生成数据仓库维度表

利用java日期类生成数据仓库维度表 Date类: 最基础的日期时间类,返回一个相对日期的毫秒数.精确到毫秒,但不支持日期的国际化和分时区显示.Date 类从Java 开发包(JDK)1.0 就开始进化,当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了,这种改进旨在更好的处理日期数据的国际化格式. Calender类: 相对于Date更加强大的时间类,是抽象类,提供了常规的日期修改功能和国际化

cognos如何制作维表左关联事实表的报表

需求描述:日期维表左关联事实表,当选择某个月的时候,我们需要把那个月每一天的数据展现出来,事实表如没数据就显示空.如下效果图: 最开始我试过使用FM来设计维表和事实表为左关联,但是由于需要2个参数,一个基于维表的月份参数,一个是基于事实表中销售类型作为参数.发现报表始终展现出来的是内连接的效果.现在我们可以巧妙利用工具箱里面的"并集"来实现,如下图: 查询1是事实表的数据,设置如下: 查询2是维表的数据,数据项与查询1的一样,但是查询2里面关于事实数据的数据项,我们统一设置表达式为:&

MySQL 如何生成日期表

在开发过程中,经常会遇到统计问题,通常交易信息都不是连续的,此时,统计出来的数据都是不连续的,所以提前生成一个时期表,当没有交易数据的时候填充0,就可以了,下面是生成日期表的步骤 1.创建一个num表,用来存储数字0~9 1 CREATE TABLE num (i int); 结果如下: 2.在num表中生成0~9 1 -- CREATE TABLE num (i int); 2 INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (

mysql中生成时间维度表

利用mysql常用日期函数生成时间维度表,效率最高,最简单,无需其他的一些工具支持.生成结果示例如下图: # time span SET @d0 = "2012-01-01"; SET @d1 = "2012-12-31"; SET @date = date_sub(@d0, interval 1 day); # set up the time dimension table DROP TABLE IF EXISTS time_dimension; CREATE T

单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构(转)

转自http://www.php1.cn/Content/DanBiao_60_YiJiLuDengDaShuJuChangJingDe_MySQL_YouHuaHeYunWeiZhiDao_%7C_GaoKeYongJiaGou.html, 更多详细资料请参看原文 此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据存储平台建设和架构设计.前新浪高