从静态日期计算日期

时间:2019-01-29 12:04:25

标签: sql sql-server

我正在尝试根据目标是在01/01/2018来计算目标

目标被计算为目标/ 5(天)*每月的网络天数,然后根据开始日期1/3(已满的2/3)降低目标

下面的代码运行良好,但是,这是从今天开始计算的目标,我需要对此进行修正,以便从2018年1月1日开始计算。

我将然后为每个未来每月创建一个新列。

当我修改代码并输入日期而不是获取日期时,出现以下错误

当开始日期<铸造( '2018年1月1日' 作为日期)-150然后浇铸(WeeklyIssueTarget为数字(17,2))/ 5 * 23

消息206,级别16,状态2,行1 操作数类型冲突:日期与int不兼容

任何帮助将不胜感激

谢谢

Select *,
    case when StartDate is null then cast(WeeklyIssueTarget as numeric(17,2))/5*23 
    when StartDate < GETDATE()-150 then cast(WeeklyIssueTarget as numeric(17,2))/5*23
    when StartDate < GETDATE()-120 then (cast(WeeklyIssueTarget as numeric(17,2))/5*23)/3*2
    when StartDate < GETDATE()-90 then (cast(WeeklyIssueTarget as numeric(17,2))/5*23)/3*1 
    when StartDate < GETDATE()-89 then 0      end as Jan18
from Details

1 个答案:

答案 0 :(得分:1)

getdate()返回datetime,而不是date。因此,同样也要强制转换为datetime,而不是强制转换为date

...
... cast('2018-01-01' as datetime) ...
...

为安全起见,更冗长,您可能需要考虑使用dateadd()进行计算。