MySQL-mysql 生成两个日期之间的所有日期列表的sql

WordPress 开发 WordPress 开发 主题:1098 回复:2322

MySQL-mysql 生成两个日期之间的所有日期列表的sql

灵芸 发布于 2016-11-17 字数 388 浏览 1096 回复 1

在mysql数据库里,用mysql标准库函数如何根据给定的两个日期生成它们之间所有以天位单位的日期列表,比如给定两个日期2012-09-01,2012-09-10然后生成如下一列值:
datecols
2012-09-01
2012-09-02
2012-09-03
2012-09-04
2012-09-05
2012-09-06
2012-09-07
2012-09-08
2012-09-09
2012-09-10
只能用mysql标准函数不能自定义函数,这个sql如何写?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(1

瑾兮 2017-01-12 1 楼

想了好久总于写出不依赖其他表,以及不写proc或function 的解决方法了,具体如下:

-- 定义自增变量
set @i = -1;
-- 创建指定日期间记录数天数需要 加 1
set @sql = repeat(" select 1 union all",-datediff('2012-09-01','2012-09-10')+1);
-- 将最后一个union all 去掉,这里前边加1个空格,就不用在减1了
set @sql = left(@sql,length(@sql)-length(" union all"));
-- 拼接sql
set @sql = concat("select date_add('2012-09-01',interval @i:=@i+1 day) as date from (",@sql,") as tmp");

prepare stmt from @sql;
execute stmt;

另附测试截图: