Ошибка преобразования при преобразовании даты и / или времени из символьной строки в пользовательской функции - PullRequest
0 голосов
/ 22 мая 2019

Работа над функцией, которая должна возвращать дату.Но я получаю эту ошибку, и я не уверен, как ее исправить

if (@flow_date = eomonth(@flow_date) or day(@flow_date) < day(@lMaturityDate)) begin
                    set @lMaturityDate = eomonth(@lMaturityDate);
                end

                else begin


                    if  month(@lMaturityDate) < 10 BEGIN
                        set @month=concat('0',month(@lMaturityDate));

                    end
                    else Begin
                        set @month=month(@lMaturityDate);

                    END

                    set @lMaturityDate =convert(date,concat(year(@lMaturityDate),'-',@month,'-',day(@flow_date)))
            end

        END
            return isnull(@lMaturityDate,null);

    END

Пример кода, который опровергает ошибку, я просто заметил, что она выдает ошибку на месяцы, превосходящие 10

declare @month varchar(40);
 declare @lMaturityDate date = '2019-11-31'
 declare @flow_date date = '2019-04-25'

if  month(@lMaturityDate) < 10 BEGIN
                    set @month=concat('0',month(@lMaturityDate));

                end
                else Begin
                    set @month=month(@lMaturityDate);

                END
set @lMaturityDate  =convert(date,concat(year(@lMaturityDate),'-',@month,'-',day(@flow_date)))
select  @lMaturityDate

1 Ответ

2 голосов
/ 22 мая 2019

Функция не работает в том смысле, что она предполагает, что независимо от того, какой день () для текущей даты также работает для месяца зрелости.Очевидно, что это не относится к любому дню (потенциально) после 28.

Например, если Flowdate = '2019-06-30' и Maturitydate = '2019-02-28', тогда ваш результат будет датой '2019-02-30 ', что недопустимо.

Вам нужно выработать логику, чтобы справиться с этим.Я бы посоветовал поискать любую дату, где месяц дата + дни> месяц 1 числа месяца.Если так, то используйте последний день месяца.

Это всего лишь предложение, у вас могут быть другие правила.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...