首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL "for“在select:更聪明的方式?

SQL "for“在select:更聪明的方式?
EN

Stack Overflow用户
提问于 2017-03-19 16:21:11
回答 1查看 42关注 0票数 0

我需要知道在(我的)SQL中是否有一种有效的方法来执行在大多数编程语言中类似于for-循环的select语句。最简单的例子是创建一个值为1到100的列。我四处寻找解决方案(我发现最有趣的是一个交叉连接每一个数字,直到目标长度)。最后,我在db中创建了一个名为N(如数学符号)的表,其中包含一个“n”列,值从1百万到1百万。

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

代码语言:javascript
复制
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循环的结束条件“。这个效果很好。那么问题是:是否有更优雅的方法来做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-19 16:26:43

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

代码语言:javascript
复制
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'

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

这句话:

代码语言:javascript
复制
date_add(curdate(), interval 1 - day(curdate()) day)

只是一个月的第一天。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42888982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档