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日期维度表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQLyog错误号码MySQL plugin caching_sha2_password could not be loaded的解决方法

    SQLyog错误号码MySQL plugin caching_sha2_password could not 

    这篇文章主要介绍了SQLyog错误号码 plugin caching_sha2_password could not be loaded的解决方法,需要的朋友可以参考下
    2023-06-06
  • 解析SQLite中的常见问题与总结详解

    解析SQLite中的常见问题与总结详解

    本篇文章是对SQLite中的常见问题进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • mysql临时表插入数据方式

    mysql临时表插入数据方式

    这篇文章主要介绍了mysql临时表插入数据方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • django2.2版本连接mysql数据库的方法

    django2.2版本连接mysql数据库的方法

    这篇文章主要介绍了django2.2版本如何连接mysql数据库,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • MySQL如何为字段添加默认时间浅析

    MySQL如何为字段添加默认时间浅析

    这篇文章主要给大家介绍了关于MySQL如何为字段添加默认时间的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • 如何搭建 MySQL 高可用高性能集群

    如何搭建 MySQL 高可用高性能集群

    MySQL 作为小型应用的数据库,它完全可以胜任,但是如果是大型应用,高性能高可用的要求,单服务器部署的MySQL就不够了。MySQL NDB Cluster为这个需求提供了一个官方的集群解决方案。本文将研究如何搭建 MySQL 高可用高性能集群
    2021-06-06
  • mysql索引学习教程

    mysql索引学习教程

    在mysql 中,索引可以分为两种类型 hash索引和 btree索引。这篇文章主要介绍了mysql索引的相关知识,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • 浅谈Mysql tinyint(1)与tinyint(4)的区别

    浅谈Mysql tinyint(1)与tinyint(4)的区别

    本文主要介绍了浅谈Mysql tinyint(1)与tinyint(4)的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • MySQL创建数据表时设定引擎MyISAM/InnoDB操作

    MySQL创建数据表时设定引擎MyISAM/InnoDB操作

    这篇文章主要介绍了MySQL创建数据表时设定引擎MyISAM/InnoDB操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 在Windows系统上使用压缩归档文件安装MySQL的步骤

    在Windows系统上使用压缩归档文件安装MySQL的步骤

    这篇文章主要介绍了在Windows系统上使用压缩归档文件安装MySQL的步骤,非常不错,具有一定的参考借鉴加载,需要的朋友可以参考下
    2018-06-06

最新评论