gpt4 book ai didi

MySQL 添加月份至今但小于其他日期的日期

转载 作者:行者123 更新时间:2023-11-29 16:40:29 24 4
gpt4 key购买 nike

我遇到一个问题,例如,我需要在某个日期中添加 1 个月,而该日期是 <= 其他日期。

例如:

set @startdt = '2018-01-15';
set @maxdt = '2018-05-31';

set @dt = @startdt;

while (@dt <= @maxdt) do
select @dt;
set @dt = date_add(@dt, interval 1 month);
end while

输出将是

2018-01-15
2018-02-15
2018-03-15
2018-04-15
2018-05-15

上面是正确的,但如果 @startdt='2018-01-31' 输出将为

2018-01-31
2018-02-28
2018-03-28
2018-04-28
2018-05-28

理想情况下,我需要返回(当 @startdt='2018-01-31' 时)

2018-01-31
2018-02-28
2018-03-31
2018-04-30
2018-05-31

我尝试了以下

set @d = cast('2018-01-31' as datetime);
set @dy = day(@d);

set @d2 = date_add(@d, interval 1 month);
set @d2y = cast(year(@d2) as char(4));
set @d2m = cast(month(@d2) as char(2));
set @d2i = cast(STR_TO_DATE(concat(@d2y,',',@d2m,',',@dy), '%Y, %m, %d') as datetime);

set @d3 = date_add(@d2i, interval 2 month);
set @d3y = cast(year(@d3) as char(4));
set @d3m = cast(month(@d3) as char(2));
set @d32 = STR_TO_DATE(@d3y,@d3y, @dy, '%Y, %m, %d');

select @d, @d2i, @d3, @d32, @d2y, @d2m, @dy;

并且输出没有意义,因为 @d2i 显示为 2018-02-31@d3@d32 显示为 NULL

我想我是只见树木不见森林。任何人提供的任何帮助将不胜感激。

最佳答案

最简单的解决方案是每次向开始日期添加逐渐增加的月份数,而不是每次向日期添加 1 个月:

set @startdt = '2018-01-31';
set @maxdt = '2018-05-31';
set @m = 1;
set @dt = @startdt;

while (@dt <= @maxdt) do
select @dt;
set @dt = @startdt + interval m month;
set @m = @m + 1;
end while

输出:

2018-01-31
2018-02-28
2018-03-31
2018-04-30
2018-05-31

关于MySQL 添加月份至今但小于其他日期的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53365755/

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