mysql - MySQL 添加月份到日期,而小于其他日期
问题描述
我有一个问题,我需要添加一个日期,例如 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
推荐阅读
- flutter - 如何在颤振中使用多个提供者
- php - 获取 json_encode 的 php 值
- html - ListBoxFor .NET CORE MVC 中的替代方案
- python - 在 Python 中的列表中添加元组
- azure-pipelines - Filetransform 任务在 Azure 管道任务期间转义换行符
- python - Python 区块链。NameError:名称“链”未定义
- docker - 仅使用委托密钥签署 docker 镜像
- laravel - Sum value from different view - laravel
- access-token - How to add an 'aud' claim to access_token
- youtube-data-api - 品牌帐号的 OAuth 访问失败