gpt4 book ai didi

mysql - 选择 : smarter way? 中的 SQL "for"

转载 作者:行者123 更新时间:2023-11-29 10:56:54 27 4
gpt4 key购买 nike

我需要知道 (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 循环的结束条件” ”。这效果很好。那么问题是:有没有更优雅的方法来做到这一点?

最佳答案

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

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)

只是获取该月第一天的一种方式。

关于mysql - 选择 : smarter way? 中的 SQL "for",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42888982/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com