Ошибка типа операнда: дата несовместима с int - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь узнать дату следующего финансового года. Но я ошибался. Когда я хочу запустить оператор else, возникает ошибка.

declare @kdate date = '2020-07-25'
declare @Period int = 30 -- in days

declare @nextkdate date 
declare @Voption int = 12 -- in months

declare @End date = '2020-08-31'

If @kdate < dateadd(day, -@Period, @End) 
    set @nextkdate = @End
Else set @nextkdate = @End + (dateadd(month, @Voption, @End))


select @nextkdate

В чем моя вина? Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Выражение @End + (dateadd(month, @Voption, @End)) является проблемой. @End объявляется как date. + (Addition) говорит:

Аргументы

выражение

Любое допустимое выражение любого из типов данных в категории numeri c, кроме типа данных bit . Не может использоваться с типами данных date , time , datetime2 или datetimeoffset .

Согласно правила для приоритета типов данных и неявных преобразований нет возврата от date к числовому типу c, например int. Следовательно, возникает ошибка «Дата типа данных операнда недопустима для оператора добавления».

0 голосов
/ 03 августа 2020

Просто используйте только dateadd:

if @kdate < dateadd(day, -@Period, @End) 
    set @nextkdate = @End
else 
    set @nextkdate = dateadd(month, @Voption, @End)

Вызов dateadd уже добавляет @Voption месяцев к дате @End.

...