如何在sql中实现日期自动补全
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章将为大家详细讲解有关如何在sql中实现日期自动补全,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。最近在开发统计访问功能时,如果数据表里缺少某一
千家信息网最后更新 2025年11月08日如何在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安全错误
数据库的锁怎样保障安全
软件开发设计是什么
软件开发 工匠
数据库如何查询末位数
服务器1-100
我的世界服务器能刷物品吗
瑞安erp系统软件开发企业
影视站服务器要求
国内网络技术高手排名
兴文县网络安全宣传
网络安全介入网关型号
产业活动单位的数据库
丝路传说服务器
三级网络技术文案高质量
分子数据库是什么
武汉东西湖网络安全学院招生
中专计算机网络技术课程设置
服务器是有陈列控制卡的
js从数据库读数据库
外汇交易网络技术
项目软件开发费用测算
从另一张表格引用数据库
卡式服务器
计算机网络技术女生好学吗
服务器报废会计分录
河北什么软件开发服务价格优惠
赚翻天网络技术
智能电网加软件开发的上市公司
zigbee软件开发详解
胜利足球 欧赔数据库
linux下炒股软件开发