如何在sql中实现日期自动补全
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章将为大家详细讲解有关如何在sql中实现日期自动补全,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。最近在开发统计访问功能时,如果数据表里缺少某一
千家信息网最后更新 2026年11月01日如何在sql中实现日期自动补全
这篇文章将为大家详细讲解有关如何在sql中实现日期自动补全,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
最近在开发统计访问功能时,如果数据表里缺少某一天的数据,就会导致那天的记录丢失,但显示的时候还是需要那天的数据,没有的话,可以默认为 0,大概想到了两种解决办法:
1. 将数据读出来后,在程序循环添加缺少的数据,但是这对于统计数据范围可变的需求,可能统计 7 天,30 天,60 天;通过程序来补全数据就显得有点麻烦了。
2. 首先生成某个范围的日历表数据,再通过这个日历表连接查询需要统计数据表的数据,没有的话,默认为 0;这样就可以得出这个范围内完整的数据了,所以这种方案,更适合这种需求的变化。
现在通过如下 sql 语句生成日历表:
CREATE TABLE num (i INT);-- 创建一个表用来储存0-9的数字INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);-- 生成0-9的数字,方便以后计算时间CREATE TABLE IF NOT EXISTS calendar(DATE DATE); -- 生成一个存储日期的表,date是字段名-- 这里是生成并插入日期数据INSERT INTO calendar(DATE) SELECT ADDDATE( ( -- 起始日期,从2017-1-1开始 DATE_FORMAT("2017-1-1", '%Y-%m-%d') ), numlist.id ) AS `date`FROM ( SELECT n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000 AS id FROM num n1 CROSS JOIN num AS n10 CROSS JOIN num AS n100 CROSS JOIN num AS n1000 ) AS numlist;执行 sql 后生成 1W 条记录,从2017-01-01~2044-05-18,这些数据已经足够用很久了;也可以通过修改相对应的条件,生成更多的数据,这里就不详细说明了,根据需求修改就行。
执行如下 sql 测试:
SELECT COUNT(u.id) AS num, c.date FROM calendar AS cLEFT JOIN users AS u ON c.date = u.`created_at`WHERE c.date BETWEEN '2017-05-01' AND '2017-05-07'GROUP BY c.`date`ORDER BY c.`date`
得出如下结果:

关于如何在sql中实现日期自动补全就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
数据
生成
日期
统计
日历
日历表
更多
范围
需求
中实
内容
数字
数据表
文章
知识
程序
篇文章
不错
办法
功能
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
山东特亿宝互联网科技有限公司
互联网科技集团
亿策互联网科技
云电互联网科技
哈尔滨秒房互联网科技有限公司
中国最先进互联网科技公司
玖二柒互联网科技公司待遇
隆华科技工业互联网
成都互联网科技公司100强
承德科技产业互联网发展
广州恒生互联网科技有限
互联网校园科技培训
互联网科技有哪些公司
内蒙古九一互联网科技
国大互联网教育科技有限公司薪资
合肥互联网科技公司公章图片
银行科技岗属于互联网吗
易企秀互联网科技是做什么的
互联网时代高科技布局
北京品多多互联网科技有限公司
花魁咖啡
喔噻互联网科技有限公司
智能科技公司是互联网公司吗
互联网巨头反垄断金融科技
奇士达互联网科技
郑州华宇互联网科技
互联网科技英文翻译
互联网科技有限公司 翻译
张召忠谈中国互联网科技
求路客互联网科技电话