Tsql 如何将float变量定义的天数添加到SQL中的日期

Tsql 如何将float变量定义的天数添加到SQL中的日期,tsql,Tsql,我有一个浮动变量,它以月为单位描述一个术语。 我需要能够将这段时间添加到给定的日期 我创建了一个简单的逻辑,例如: 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] 当我想将MonthT

我有一个浮动变量,它以月为单位描述一个术语。 我需要能够将这段时间添加到给定的日期

我创建了一个简单的逻辑,例如:

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]
当我想将MonthTerm变量设置为1、2或3周等时间段时,就会出现问题。因此,在两周内,变量如下所示:

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.的简单表达式。。或者我需要一个更复杂的解决方案?干杯

Select
    cast((CAST(@monthsTerm*100 as int) % 100)*7 /0.25/100 as int) as days ,                                  
    (((CAST(@monthsTerm*100 as int) % 100)/100) / 0.25 * 7),
    DATEADD(dd,cast((CAST(@monthsTerm*100 as int) % 100)*7 /0.25/100 as int), (DATEADD(mm, CAST(@monthsTerm AS INT), '2018-01-01')))  AS [Subscription end date]

乘以100,在%

后除以100,重写公式以使用周,并在将其输入函数之前将其从月转换为周?但在@MonthTerm=1的情况下,我不想添加4周28天,但整个月和每个月可以有不同的天数30,2月31日或29日,28日。公平。我一路上都没想到这个。我把这个应用到了一些更复杂的查询中,效果很好,非常感谢!