mysql - 用未来年份创建 @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;
推荐阅读
- r - 如何使用 ggplot_build 和 ggplot_gtable 调整 facet_grid 框架和箱线图之间的距离
- java - 如何在应用程序前台制作一个信号推送通知警报
- python - pd.Series.reset_index() 索引从 n1 到 n2
- powershell - 将默认参数添加到 Powershell Core 脚本
- android - 将firebase添加到android应用程序
- jquery - 由于目标被视为被动,无法在被动事件侦听器中阻止默认值?为什么滚动时出现此错误?
- json - 如何遍历嵌套的 json 数组并根据条件更改节点属性?
- c# - 如果我们将 a 与 á 进行比较,我怎样才能得到正确的结果?
- node.js - 如果我们将 nodejs 进程放在 docker 容器中,会对性能产生什么影响?
- php - 尝试使用 php PDO 更新语句通过 id 更新我的表上的数据