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

准备日历表:

  1. CREATE TABLE `m_dim_day` (
  2. `ID` int(11) NOT NULL AUTO_INCREMENT,
  3. `DAY_ID` varchar(10) DEFAULT NULL,
  4. `DAY_SHORT_DESC` varchar(10) DEFAULT NULL,
  5. `DAY_LONG_DESC` varchar(50) DEFAULT NULL,
  6. `WEEK_DESC` varchar(20) DEFAULT NULL,
  7. `WEEK_ID` varchar(20) DEFAULT NULL,
  8. `WEEK_LONG_DESC` varchar(50) DEFAULT NULL,
  9. `MONTH_ID` varchar(20) DEFAULT NULL,
  10. `MONTH_LONG_DESC` varchar(50) DEFAULT NULL,
  11. `QUARTER_ID` varchar(20) DEFAULT NULL,
  12. `QUARTER_LONG_DESC` varchar(20) DEFAULT NULL,
  13. `YEAR_ID` varchar(20) DEFAULT NULL,
  14. `YEAR_LONG_DESC` varchar(50) DEFAULT NULL,
  15. PRIMARY KEY (`ID`)
  16. ) ENGINE=InnoDB AUTO_INCREMENT=731 DEFAULT CHARSET=utf8;

存储过程如下:

  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `f_m_dim_day`(in yr VARCHAR(20))
  2. begin
  3. declare i int;
  4. declare start_date varchar(20);
  5. declare end_date varchar(20);
  6. declare date_count int;
  7.  
  8. set i=0;
  9. set start_date= concat(yr, '-01-01');
  10. set end_date = concat(yr+1,'-01-01');
  11. DELETE from m_dim_day where year_id = yr;
  12. set date_count = datediff(end_date, start_date);
  13.  
  14. while i < date_count DO
  15. 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)
  16. SELECT
  17. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y%m%d') DAY_ID,
  18. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y-%m-%d') DAY_SHORT_DESC,
  19. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y年%m月%d日') DAY_LONG_DESC,
  20. 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,
  21. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y%u') WEEK_ID,
  22. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y年第%u周') WEEK_LONG_DESC,
  23. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y%m') MONTH_ID,
  24. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y年第%m月') MONTH_LONG_DESC,
  25. 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,
  26. 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,
  27. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y') YEAR_ID,
  28. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y年') YEAR_LONG_DESC
  29. from dual;
  30. set i=i+1;
  31. set start_date = DATE_FORMAT(date_add(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),interval 1 day),'%Y-%m-%d');
  32. end while;
  33. end

调用存储过程如下,参数传入年份,即生成那一年的数据

call f_m_dim_day('2018');

第二种:

建立日历表格式:

  1. CREATE TABLE `m_dim_day` (
  2. `dt` varchar(10) DEFAULT NULL,
  3. `dt2` varchar(10) DEFAULT NULL,
  4. `yr` varchar(10) DEFAULT NULL,
  5. `mm` varchar(10) DEFAULT NULL,
  6. `dd` varchar(10) DEFAULT NULL,
  7. `dayofweek` varchar(10) DEFAULT NULL,
  8. `weeknum` varchar(10) DEFAULT NULL,
  9. `qr` varchar(10) DEFAULT NULL,
  10. `bourse_week` varchar(10) DEFAULT NULL,
  11. `yrmm` varchar(10) DEFAULT NULL,
  12. `week_begin` varchar(10) DEFAULT NULL,
  13. `week_end` varchar(10) DEFAULT NULL,
  14. PRIMARY KEY (`dt`)
  15. )ENGINE=InnoDB AUTO_INCREMENT=1096 DEFAULT CHARSET=utf8;

创建存储过程:

  1. CREATE PROCEDURE `f_m_dim_day`(in year VARCHAR(20))
  2. begin
  3. declare i int;
  4. declare start_date varchar(20);
  5. declare end_date varchar(20);
  6. declare date_count int;
  7.  
  8. set i=0;
  9. set start_date= concat(year, '-01-01');
  10. set end_date = concat(year+1,'-01-01');
  11. DELETE from m_dim_day where yr = year;
  12. set date_count = datediff(end_date, start_date);
  13.  
  14. while i < date_count DO
  15. INSERT into m_dim_day (dt,dt2,yr,mm,dd,dayofweek,weeknum,qr,bourse_week,yrmm,week_begin,week_end)
  16. SELECT
  17. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y-%m-%d') dt,
  18. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y%m%d') dt2,
  19. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y') yr,
  20. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%m') mm,
  21. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%d') dd,
  22. 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,
  23. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%u') weeknum,
  24. 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,
  25. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y-%u') bourse_week,
  26. DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y%m') yrmm,
  27. DATE_FORMAT(subdate(start_date,date_format(start_date,'%w')-1),'%Y%m%d') week_begin,
  28. DATE_FORMAT(subdate(start_date,date_format(start_date,'%w')-7),'%Y%m%d') week_end
  29. from dual;
  30. set i=i+1;
  31. set start_date = DATE_FORMAT(date_add(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),interval 1 day),'%Y-%m-%d');
  32. end while;
  33. end

调用存储过程:

call f_m_dim_day('2018')

最终显示如下:

MySql生成日历表的更多相关文章

  1. highcharts实例教程二:结合php与mysql生成饼图

    上回我们分析了用highcharts结合php和mysql生成折线图的实例,这次我们以技术cto网站搜索引擎流量为例利用highcharts生成饼图. 饼图通常用在我们需要直观地显示各个部分所占的比例 ...

  2. 利用TPC-H为MYSQL生成数据

    ## 利用TPC-H为MYSQL生成数据 导言 这篇文章是看了joyee写的TPC-H数据导入MySQL教程以及另一篇网上的MySQL TPCH测试工具简要手册 后写的,有些内容是完全转载自以上两篇文 ...

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

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

  4. mysql 生成UUID() 即 ORACLE 中的guid()函数

    MYSQL 生成UUID 即 guid 函数-- 带 - 的UUIDselect UUID() -- 去掉 - 的UUIDselect replace(uuid(),'-','') 一个表的数据插入另 ...

  5. VS2017+EF+Mysql生成实体数据模型(解决闪退的坑)

    原文:VS2017+EF+Mysql生成实体数据模型(解决闪退的坑) 最近要使用VS2017+EF+Mysql,在生成实体数据模型踏过一些坑,在此做个总结. 1.先下载并安装 mysql-connec ...

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

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

  7. EntityFramework 6 + Mysql 生成POCOs

    问题 使用EDMX文件 EF Power Tools参数不正确的解决方法 对于"异常来自 HRESULT:0x80070057 (E_INVALIDARG)",有方法说" ...

  8. MySQL生成模型

    根据数据库表生成Model using System; using System.Collections.Generic; using System.Data; using System.Text; ...

  9. mysql生成varchar类型主键排序

    用uuid生成20位的主键 SELECT LEFT(REPLACE(UUID(), '-', ''),20) FROM DUAL 另一种方法: 因为数据库中有字母 需要排序的时候去除字母,重新取最大值 ...

随机推荐

  1. PostgreSQL基础命令

    1. 查看数字库和表 切换用户postgres su postgres 执行psql进入后台(就像执行mysql进入后台一样) 2. 更新postgres密码 \password 3. 创建数据库用户 ...

  2. Linux应用server搭建手冊—Weblogic服务域的创建与部署

         前一篇谈到了Weblogic的安装,接下来整理weblogic服务域的创建及项目的部署      一.webLogic服务域创建          使用root用户登录后使用命令:#su W ...

  3. git 生成ssh keys

    最近从svn转到gitlab 记录一下如何生成ssh keys 首先下载GitExtensions246SetupComplete.msi并安装,如果已经安装了git,那么安装途中就跳过就行 安装完毕 ...

  4. LeetCode——4Sum &amp; 总结

    LeetCode--4Sum & 总结 前言 有人对 Leetcode 上 2Sum,3Sum,4Sum,K Sum问题作了总结: http://blog.csdn.net/nanjunxia ...

  5. App开放接口API安全性 — Token签名sign的设计与实现

    在app开放接口API的设计中,避免不了的就是安全性问题. 一.https协议 对于一些敏感的API接口,需要使用https协议. https是在http超文本传输协议加入SSL层,它在网络间通信是加 ...

  6. AsyncContext简介

    为了支持异步处理,在Servlet 3.0中,在ServletRequest上提供了startAsync()方法: AsyncContext startAsync() throws Java.lang ...

  7. [Windows Azure] Developing Multi-Tenant Web Applications with Windows Azure AD

    Developing Multi-Tenant Web Applications with Windows Azure AD 2 out of 3 rated this helpful - Rate ...

  8. ubuntu中gitlab搭建

    1.gitlab介绍 gitlab是一款代码仓库管理工具,可以用来搭建自己的代码管理服务器. gitlab包自带了redis,nginx,postgresql,unicorn等众多服务组件. 2.硬件 ...

  9. python(36):python日志打印,保存,logging模块学习

    1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info messa ...

  10. 关于go1.6使用vendor的坑

    基本命令是:$ govendor init$ govendor add +external 坑:如果在govendor之前,修改过go get的包源代码,那么必须在该包目录里git commit这个修 ...