mysql使用存储过程,创建日历表:

准备日历表:

CREATE TABLE `m_dim_day` (  `ID` int(11) NOT NULL AUTO_INCREMENT,`DAY_ID` varchar(10) DEFAULT NULL,     `DAY_SHORT_DESC` varchar(10) DEFAULT NULL,  `DAY_LONG_DESC` varchar(50) DEFAULT NULL,  `WEEK_DESC` varchar(20) DEFAULT NULL,  `WEEK_ID` varchar(20) DEFAULT NULL,  `WEEK_LONG_DESC` varchar(50) DEFAULT NULL,  `MONTH_ID` varchar(20) DEFAULT NULL,  `MONTH_LONG_DESC` varchar(50) DEFAULT NULL,  `QUARTER_ID` varchar(20) DEFAULT NULL,  `QUARTER_LONG_DESC` varchar(20) DEFAULT NULL,  `YEAR_ID` varchar(20) DEFAULT NULL,  `YEAR_LONG_DESC` varchar(50) DEFAULT NULL,  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=731 DEFAULT CHARSET=utf8;

存储过程如下:

CREATE DEFINER=`root`@`localhost` PROCEDURE `f_m_dim_day`(in yr VARCHAR(20))
begin
declare i int;
declare start_date varchar(20);
declare end_date varchar(20);
declare date_count int;set i=0;  set start_date= concat(yr, '-01-01');set end_date = concat(yr+1,'-01-01');DELETE from m_dim_day where year_id = yr;set date_count = datediff(end_date, start_date);while i < date_count DO  INSERT into m_dim_day (DAY_ID,DAY_SHORT_DESC,DAY_LONG_DESC,WEEK_DESC,WEEK_ID,WEEK_LONG_DESC,MONTH_ID,MONTH_LONG_DESC,QUARTER_ID,QUARTER_LONG_DESC,YEAR_ID,YEAR_LONG_DESC)  SELECT  DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y%m%d') 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,  case DAYOFWEEK(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'))  when 1 then '星期日' when 2 then '星期一' when 3 then '星期二' when 4 then '星期三' when 5 then '星期四' when 6 then '星期五' when 7 then '星期六' end WEEK_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_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_m_dim_day('2018');

第二种:

建立日历表格式:

CREATE TABLE `m_dim_day` (
`dt` varchar(10) DEFAULT NULL,
`dt2` varchar(10) DEFAULT NULL,
`yr` varchar(10) DEFAULT NULL,
`mm` varchar(10) DEFAULT NULL,
`dd` varchar(10) DEFAULT NULL,
`dayofweek` varchar(10) DEFAULT NULL,
`weeknum` varchar(10) DEFAULT NULL,
`qr` varchar(10) DEFAULT NULL,
`bourse_week` varchar(10) DEFAULT NULL,
`yrmm` varchar(10) DEFAULT NULL,
`week_begin` varchar(10) DEFAULT NULL,
`week_end` varchar(10) DEFAULT NULL,
PRIMARY KEY (`dt`)
)ENGINE=InnoDB AUTO_INCREMENT=1096 DEFAULT CHARSET=utf8;

创建存储过程:

CREATE PROCEDURE `f_m_dim_day`(in year VARCHAR(20))
begin
declare i int;
declare start_date varchar(20);
declare end_date varchar(20);
declare date_count int;set i=0;  set start_date= concat(year, '-01-01');set end_date = concat(year+1,'-01-01');DELETE from m_dim_day where yr = year;set date_count = datediff(end_date, start_date);while i < date_count DO  INSERT into m_dim_day (dt,dt2,yr,mm,dd,dayofweek,weeknum,qr,bourse_week,yrmm,week_begin,week_end)  SELECT  DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y-%m-%d') dt,  DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y%m%d') dt2, DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y') yr,DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%m') mm,DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%d') dd,   case DAYOFWEEK(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'))  when 1 then '星期日' when 2 then '星期一' when 3 then '星期二' when 4 then '星期三' when 5 then '星期四' when 6 then '星期五' when 7 then '星期六' end dayofweek,  DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%u') weeknum,  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'))) qr,DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y-%u') bourse_week,  DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y%m') yrmm,DATE_FORMAT(subdate(start_date,date_format(start_date,'%w')-1),'%Y%m%d') week_begin,DATE_FORMAT(subdate(start_date,date_format(start_date,'%w')-7),'%Y%m%d') week_endfrom 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_m_dim_day('2018')

最终显示如下:

[一个胖子]

分类: 数据

MySql生成日历表相关推荐

  1. 更新MYSQL生成日历表,支持跨年份 存储过程

    更新MYSQL生成日历表,支持跨年 代码 CREATE DEFINER = 'root'@'localhost' PROCEDURE `proc_ym`(IN sdate DATE, IN edate ...

  2. mysql 生成日历表_如何在SQL中创建100年的日历表

    下面是可以在SQL Server中使用的通用脚本.只需修改开始日期和结束日期: IF EXISTS (SELECT * FROM information_schema.tables WHERE Tab ...

  3. mysql 生成日历视图_mysql sql语句生成日历表

    mysql sql语句生成日历表  (主要用于按月,按天group by分组统计时,有些日期没有记录,需要补0) 从自定义的开始时间,生成1万条记录 CREATE TABLE if not exist ...

  4. php mysql 随机字符串函数是,mysql生成随机字符串函数分享

    这篇文章主要介绍了mysql生成随机字符串函数分享,本文直接给出实现代码,需要的朋友可以参考下 set global log_bin_trust_function_creators = 1; DROP ...

  5. Mysql 生成不重复的随机数字

    在网上查找Mysql 生成不重复的随机数字 ,竟然没找到合适的例子. 其实思路很简单,利用MySQL现有的函数,然后进行加工处理,达到预期的结果.可以用到的MySQL函数为rand() ,以及 rou ...

  6. MYSQL 生成UUID() 即 ORACLE 中的guid()函数

    MYSQL 生成UUID 即 guid 函数 -- 带 - 的UUID select UUID() -- 去掉 - 的UUID select replace(uuid(),'-','') 转载于:ht ...

  7. Linux mysql生成不了随机密码,用MySQL 生成随机密码

    用MySQL 生成随机密码 晚上有朋友问起,简单的写了一个. DELIMITER $$ CREATE FUNCTION `t_girl` . `func_rand_string` ( f_num ti ...

  8. [Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子:

    [Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子: mydf001=sqlContext.read.format("jdbc").o ...

  9. myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法)

    myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法) 参考文章: (1)myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法) (2)https://www. ...

最新文章

  1. python中用函数货币转换代码_python将人民币转换大写的脚本代码
  2. mac地址修改_如何修改手机MAC地址?
  3. Android中如何查看在res中存放的drawable文件对应的JAVA类型是什么呢
  4. LeetCode —— 145. 二叉树的后序遍历【递归与迭代】(Python)
  5. 【杂项】2020年年度报告
  6. 通过深度优先搜索(DFS)对图的边进行分类
  7. VB.net小技巧系列目录
  8. 鸿沟理论(The Chasm Theory)介绍
  9. c语言 步进电机 程序,两相5、6线步进电机C语言程序
  10. python方差分析样本量太大_十五、方差分析--使用Python进行单因素方差分析(ANOVA)...
  11. 电脑中病毒所有html文件,文件夹全部变成exe文件该怎么办?电脑中了kiss病毒的两种解决办法...
  12. 技术写作中的那些神兵利器
  13. echarts+echarts-gl vue2制作3D地图+下钻功能+标记点功能,解决dblclick事件失效问题,解决地图下钻后边框不更新保留问题
  14. 2019年的软件百强企业榜单
  15. 如何修改C盘下的用户名
  16. 单片机-结构体函数指针高级使用方法
  17. mysql 悲观锁实现
  18. 超大文件上传-如何上传文件-大文件上传
  19. 【解决vscode终端输出中文乱码问题图文教程】
  20. 计算机事件查看u盘使用情况,关于U盘使用记录的日志文件

热门文章

  1. vue页面路由跳转重复报错的问题
  2. 棋和麦粒问题(C语言回调函数实现)
  3. RESTful API 笔记整理
  4. linux系统nc命令使用
  5. CVPR2022|比VinVL快一万倍!人大提出交互协同的双流视觉语言预训练模型COTS,又快又好!
  6. 奇声(IQDubbing)-- 面向影视剧的AI配音技术
  7. SAP Crystal Reports, developer version for Microsoft Visual Studio - 2012 Now Available for Download
  8. 利用桌面背景进行任务管理
  9. 量子计算机院士,厚积薄发!中科院院士宣布重要消息,又一技术世界领域领先全球...
  10. 武汉大学 计算机博士复试分数线,武汉大学2016年博士研究生录取分数线