MySQL生成日期维度表的sql语句

 更新时间:2024年07月03日 14:43:39   作者:ronshi  
这篇文章主要介绍了MySQL生成日期维度表的sql语句,通过存储过程生成,其次是通过递归的公用表表达式生成,需要的朋友可以参考下

MySQL生成日期维度表

1、通过存储过程生成

DELIMITER $$
CREATE PROCEDURE dateDim(startDate DATE, endDate DATE)  
BEGIN  
    DECLARE currentDate DATE;  
    SET currentDate = startDate;  
    WHILE currentDate <= endDate DO  
        INSERT INTO sys_calendar (stats_day) VALUES (currentDate);  
        SET currentDate = DATE_ADD(currentDate, INTERVAL 1 DAY);  
    END WHILE;  
END $$
DELIMITER ;  
CALL dateDim('2022-01-01', '2030-12-31');

2、通过递归的公用表表达式生成

WITH RECURSIVE date_series AS (  
  SELECT '2023-01-01' AS date_value  
  UNION ALL  
  SELECT DATE_ADD(date_value, INTERVAL 1 DAY)  
  FROM date_series  
  WHERE date_value < '2023-12-31'  
)  
INSERT INTO date_dim (date_value)  
SELECT date_value FROM date_series;

补充:Mysql 快速生成日期时间维度表

Mysql 快速生成日期时间维度表

创建表结构

CREATE TABLE `dim_date` (
  `id` int(11) NOT NULL COMMENT '日期键 20000101',
  `date` date DEFAULT NULL COMMENT '日期 2000-01-01',
  `year` smallint(6) DEFAULT NULL COMMENT '年 2000',
  `month` smallint(6) DEFAULT NULL COMMENT '月 01',
  `day` smallint(6) DEFAULT NULL COMMENT '日 01',
  `quarter` smallint(6) DEFAULT NULL COMMENT '当年所属季度',
  `year_of_week` smallint(6) DEFAULT NULL COMMENT '当前周所属年份',
  `week` smallint(6) DEFAULT NULL COMMENT '当年所属周',
  `day_of_week` smallint(6) DEFAULT NULL COMMENT '星期几',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

生产数据

SET @d0 = '2000-01-01';
SET @d1 = '2100-12-31';
SET @date = DATE_SUB( @d0, INTERVAL 1 DAY );
INSERT INTO `dim_date`(`date`, `id`,  `year`, `month`, `day`, `quarter`, `year_of_week`, `week`, `day_of_week`) 
SELECT
@date := DATE_ADD( @date, INTERVAL 1 DAY ) AS DATE,
DATE_FORMAT( @date, '%Y%m%d' ) AS id,
YEAR ( @date ) AS Y,
MONTH ( @date ) AS m,
DAY ( @date ) AS d,
QUARTER ( @date ) AS q,
DATE_FORMAT( @date, '%x' ) AS yw,
WEEK ( @date, 3 ) AS w,
WEEKDAY( @date ) + 1 AS wd
FROM
	[某张行数比日期差大的表]
WHERE
	DATE_ADD( @date, INTERVAL 1 DAY ) <= @d1 
ORDER BY
	DATE;

到此这篇关于MySQL生成日期维度表的文章就介绍到这了,更多相关MySQL日期维度表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文分析SQL Server中事务使用的锁

    一文分析SQL Server中事务使用的锁

    这篇文章主要介绍了一文分析SQL Server中事务使用的锁,数据库引擎使用不同的锁模式锁定资源,通过不同锁的组合使用达到不同的数据库事务隔离级别,需要的朋友可以参考一下
    2022-09-09
  • mysql中insert与select的嵌套使用解决组合字段插入问题

    mysql中insert与select的嵌套使用解决组合字段插入问题

    本节主要介绍了mysql中insert与select的嵌套使用解决组合字段插入问题,需要的朋友可以参考下
    2014-07-07
  • 深度解析MySQL 5.7之中文全文检索

    深度解析MySQL 5.7之中文全文检索

    InnoDB默认的全文索引parser非常合适于Latin,因为Latin是通过空格来分词的。但对于像中文,日文和韩文来说,没有这样的分隔符。一个词可以由多个字来组成,所以我们需要用不同的方式来处理。在MySQL 5.7.6中我们能使用一个新的全文索引插件来处理它们:n-gram parser。
    2016-12-12
  • mysql日志系统redo log和bin log介绍

    mysql日志系统redo log和bin log介绍

    这篇文章主要介绍了mysql日志系统redo log和bin log介绍,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • phpstudy无法启动MySQL数据库解决方法

    phpstudy无法启动MySQL数据库解决方法

    这篇文章主要给大家介绍了关于phpstudy无法启动MySQL数据库的解决方法,文中通过图文将解决的办法介绍的非常详细,对同样遇到这个问题的同学具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-05-05
  • MySQL INNER JOIN 的底层实现原理分析

    MySQL INNER JOIN 的底层实现原理分析

    这篇文章主要介绍了MySQL INNER JOIN 的底层实现原理,INNER JOIN的工作分为筛选和连接两个步骤,连接时可以使用多种算法,通过本文,我们深入了解了MySQL中INNER JOIN的底层实现原理,需要的朋友可以参考下
    2023-06-06
  • MySQL高级查询示例详细介绍

    MySQL高级查询示例详细介绍

    这篇文章主要介绍了MySQL高级查询示例,在面试过程中经常会遇到sq查询问题,今天小编通过本文给大家介绍下MySQL高级查询语法分析,感兴趣的朋友跟随小编一起看看吧
    2023-02-02
  • MySQL数据库入门之多实例配置方法详解

    MySQL数据库入门之多实例配置方法详解

    这篇文章主要介绍了MySQL数据库入门之多实例配置方法,结合实例形式分析了MySQL数据库多实例配置相关概念、原理、操作方法与注意事项,需要的朋友可以参考下
    2020-05-05
  • Mysql中explain作用详解

    Mysql中explain作用详解

    这篇文章主要介绍了Mysql中explain的相关内容,涉及索引的部分知识,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • SQL语句单引号与双引号的使用方法

    SQL语句单引号与双引号的使用方法

    这篇文章主要介绍了SQL语句中单引号、双引号的使用方法,分别讲述,虽然说的是Insert语句, 但是Select、Update、Delete语句都是一样的,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-03-03

最新评论