MySQL 生成日期表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 生成日期表相关的知识,希望对你有一定的参考价值。

参考技术A 1、创建一个num表,用来存储数字0~9

2.生成一个存储日期的表,datalist是日期字段名

3.生成并插入日期数据

4.最后再添加主键即可

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), (6), (7), (8), (9);

结果如下:

3、生成一个存储日期的表,datalist是字段名

-- CREATE TABLE num (i int);
-- INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
CREATE TABLE  if not exists calendar(datelist date); 

结果如下:

4、生成并插入日期数据

复制代码
 1 -- CREATE TABLE num (i int);
 2 -- INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
 3 -- CREATE TABLE  if not exists calendar(datelist date); 
 4 INSERT INTO calendar(datelist) SELECT
 5     adddate(
 6         (   -- 这里的起始日期,你可以换成当前日期
 7             DATE_FORMAT("2016-1-1", \'%Y-%m-%d\') 
 8         ),
 9         numlist.id
10     ) AS `date`
11 FROM
12     (
13         SELECT
14             n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000+ n10000.i * 10000 AS id
15         FROM
16             num n1
17         CROSS JOIN num AS n10
18         CROSS JOIN num AS n100
19         CROSS JOIN num AS n1000
20         CROSS JOIN num AS n10000
21     ) AS numlist;
复制代码

结果所示:

5、最后再添加主键即可

复制代码
 1 -- CREATE TABLE num (i int);
 2 -- INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
 3 -- CREATE TABLE  if not exists calendar(datelist date); 
 4 -- INSERT INTO calendar(datelist) SELECT
 5 --     adddate(
 6 --         (   -- 这里的起始日期,你可以换成当前日期
 7 --             DATE_FORMAT("2016-1-1", \'%Y-%m-%d\') 
 8 --         ),
 9 --         numlist.id
10 --     ) AS `date`
11 -- FROM
12 --     (
13 --         SELECT
14 --             n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000+ n10000.i * 10000 AS id
15 --         FROM
16 --             num n1
17 --         CROSS JOIN num AS n10
18 --         CROSS JOIN num AS n100
19 --         CROSS JOIN num AS n1000
20 --         CROSS JOIN num AS n10000
21 --     ) AS numlist;
22 ALTER TABLE `calendar`
23 ADD COLUMN `id`  int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT \'主键\' FIRST ,
24 ADD PRIMARY KEY (`id`);
复制代码

最终结果如图所示:

然后再去统计数据的时候关联该日期表就行了

以上是关于MySQL 生成日期表的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 生成日期表

MySQL 如何生成日期表

mysql 日期辅助表

数据分析SQL日期维度表生成(含节假日)

数据分析SQL日期维度表生成(含节假日)

使用 PHP MYSQL 生成月度日期和小时报表