MySQL добавляет месяц к дате, а не к другой дате - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть проблема, когда мне нужно добавить, например, 1 месяц к дате, а дата <= некоторая другая дата. </p>

Например:

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 Ответ

0 голосов
/ 19 ноября 2018

Самое простое решение - вместо добавления 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...