背景
- MySQL版本5.7,需要生成连续的日期,只通过select,而不走自定义函数或存储过程
思路
- 只需要生成连续的数字,然后通过日期时间函数操作即可
脚本
SELECT
DATE_ADD( "2022-11-02", INTERVAL CAST( @rank := @rank + 1 AS SIGNED ) DAY ) AS `rank`
FROM
detail p,
( SELECT @rank := 0 ) n
LIMIT 100;
SELECT @rank := 0
通过:=
赋值变量为0detail
是一个业务大表,目的是生成笛卡尔积,并逐条取出,产生迭代效果
小结
- 核心就是必须通过辅助表产生笛卡尔积,形成迭代自增
- 缺点是辅助表数据不是无限的,无法通过传入一个数控制迭代次数