问题描述
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;