使用未来年份创建@X 行

问题描述

我正在尝试创建一个 sql,它将显示未来年份的 @X 行:

year(Now())+1
year(Now())+2
year(Now())+3
...

@X 是用户定义的变量。

我只是来使用联合选择,但它看起来很讨厌并且适用于相当低的@x:

set @x:=3;
select year(Now())+1 as year
union select if(@x>1,year(Now())+2,null) as year
union select if(@x>2,year(Now())+3,null) as year
union select if(@x>3,year(Now())+4,null) as year;

解决方法

这是自 MySQL 8 以来可用的递归 CTE 的领域。

SET @x = 5;

WITH RECURSIVE
years
AS
(
SELECT year(now()) year
UNION ALL
SELECT year + 1
       FROM years
       WHERE year + 1 - year(now()) <= @x
)
SELECT *
       FROM years;

db<>fiddle