选择SQL“for”:更聪明的方式?

时间:2017-03-19 16:21:11

标签: mysql sql

我需要知道(My)SQL中是否有一种有效的方法可以在大多数编程语言中执行类似于for循环的select语句。最简单的例子是创建一个值为1到100的列。我已经搜索了解决方案(我发现最有趣的一个是将每个数字交叉连接到目标长度的一个)。最后,我在我的数据库中创建了一个名为N(如数学符号中)的表,其中单列'n'和值为1到100万。

以下是我需要的一个例子:

select .....
cross join
(
select n,str_to_date(period_add(date_format(CURDATE(),'%Y%m'),n),'%Y%m') as 'date' from n where  n<period_diff(201912,date_format(CURDATE(),'%Y%m'))
)

这将返回一个列,其中包含curdate(恰好是2017年3月)到2019年12月的所有年/月组合。您可以看到n用作“变量”来添加月份并计算“for循环结束条件” ”。这很好用。那么问题是:有更优雅的方式来做到这一点吗?

1 个答案:

答案 0 :(得分:1)

你的方法很好。我可能倾向于这样做:

select date_add(date_add(curdate(), interval 1 - day(curdate()) day), interval n.n month)
from n
where date_add(date_add(curdate(), interval 1 - day(curdate()) day), interval n.n month) <= '2019-12-01'

我更喜欢做日期算术,而不是来回转换字符串。

表达式:

date_add(curdate(), interval 1 - day(curdate()) day)

只是获得本月第一天的一种方式。

相关问题