У меня есть переменная float
, которая описывает срок в месяцах. Мне нужно иметь возможность добавить этот период к определенной дате.
Я создал простой лог c, такой как:
DECLARE @monthsTerm AS float = 2;
Select DATEADD(dd,((CAST(@monthsTerm AS INT) % 1) / 0.25 * 7), (DATEADD(mm, CAST(@monthsTerm AS INT), '2018-01-01'))) AS [Subscription end date]
Проблема возникает, когда я хочу установить monthsTerm
переменная на 1, 2 или 3 недели и др. c. промежуток времени. Таким образом, в течение двух недель переменная будет выглядеть так:
DECLARE @monthsTerm AS float = 0.5;
, и я ожидаю получить '2018-01-15'
в результате, но теперь она возвращает '2018-01-01', что неверно.
Я думал о переносе выражения просто в:
Select DATEADD(dd,((@monthsTerm % 1) / 0.25 * 7), (DATEADD(mm, CAST(@monthsTerm AS INT), '2018-01-01'))) AS [Subscription end date]
, однако я получаю исключение:
The data types float and int is incompatible in the modulo operator.
Я знаю, что, например, подобное выражение будет работать в C#:
public DateTime EndDate
=> StartDate.AddMonths((int)TermMonths).AddDays((TermMonths % 1) / 0.25 * 7);
Есть ли какой-нибудь простой способ обойти это, чтобы у меня было только одно простое выражение с Select DATEADD(..
, или мне нужно в конечном итоге найти более сложное решение? Приветствия