本文摘自PHP中文网,作者(*-*)浩,侵删。
sql中实现日期自动补全的方法:首先生成某个范围的日历表数据;然后通过这个日历表连接查询需要统计数据表的数据;最后得出这个范围内完整的数据即可。

最近在开发统计访问功能时,如果数据表里缺少某一天的数据,就会导致那天的记录丢失,但显示的时候还是需要那天的数据,没有的话,可以默认为 0,大概想到了两种解决办法:
1. 将数据读出来后,在程序循环添加缺少的数据,但是这对于统计数据范围可变的需求,可能统计 7 天,30 天,60 天;通过程序来补全数据就显得有点麻烦了。
2. 首先生成某个范围的日历表数据,再通过这个日历表连接查询需要统计数据表的数据,没有的话,默认为 0;这样就可以得出这个范围内完整的数据了,所以这种方案,更适合这种需求的变化。
现在通过如下 sql 语句生成日历表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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( DATE DATE );
INSERT INTO calendar( DATE ) SELECT
ADDDATE(
(
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 server中索引的用法详解
mysql为id选择合适的数据类型
sql server 编译与重编译详解
详解navicat简单使用方法
mysql缓存的查询和清除命令使用详解
在sql的select语句中用于实现选择运算的是什么
sql查询数据过多内存溢出怎么办
sqlserver 锁表语句分享
sql语句(t-sql汇总) 用t-sql画出这些图形
sqlserver地址搜索性能优化
更多相关阅读请进入《sql》频道 >>
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » sql中如何实现日期自动补全