怎么用SQL查询生成一个连续的日期

【 TiDB 使用环境】生产环境
【 TiDB 版本】v5.4.1
【遇到的问题:问题现象及影响】

  • 如题,给定开始日期,结束日期,得到 连续的日期,对应的周,对应的星期
  • tidb 中 mysql.help_topic 我在本地查询是空的,用不了

这个在任何一个数据库通过SQL或者存储过程应该可以实现,就是要费脑子

WITH RECURSIVE dates(d) AS (
SELECT DATE(‘2022-03-01’) d
UNION ALL
SELECT d + INTERVAL 1 DAY FROM dates WHERE d < DATE(‘2022-03-31’)
)
SELECT * FROM dates;

set @rank=0;
select date_add(‘2023-09-02’,interval @rank:=@rank+1 day) from information_schema.tables a where @rank<datediff(‘2024-01-02’,‘2023-09-02’);
或者
select date_add(‘2023-09-02’,interval @rank:=@rank+1 day) from information_schema.tables a,(select @rank:=0) b where @rank<datediff(‘2024-01-02’,‘2023-09-02’);
虽然不太优雅,但也是一种方案

类似@forever的,还能这样

select d,week(date(d)) wd,weekday(date(d))+1 w 
  from (select date_add('2023-01-01',interval (row_number() over())-1 day) d  
    from metrics_schema.tikv_scheduler_scan_details) dt 
where d<=date'2023-07-31';
1 个赞

嵌套层数超过1000时会报错,可以调大session的cte_max_recursion_depth