处理 DATEDIFF 计算中的空值

Handling nulls in DATEDIFF calculation

我正在使用 Microsoft SQL Server 2012 并保持 运行 进入错误

Divide by zero error encountered.

对于如下语句。如果两个日期相同,我想添加一个空值。

SELECT 
    sf.TotalPrice / DATEDIFF(day, sf.StartDate,sf.EndDate) as DailyAllocatedRevenue,
    sf.TotalPrice
FROM 
    sftable 

在Sql服务器中使用NullIf函数 如果差异 returns 0

,它将 return 为空

看到这个link会对你有所帮助

SELECT 

    sf.TotalPrice / NULLIF(DATEDIFF(day, sf.StartDate,sf.EndDate),0) as DailyAllocatedRevenue
    ,sf.TotalPrice

FROM sftable 

您可以将 DATEDIFF 包裹在 NULLIF 中:

SELECT 

    sf.TotalPrice / NULLIF(DATEDIFF(day, sf.StartDate,sf.EndDate),0) as DailyAllocatedRevenue
    ,sf.TotalPrice

FROM sftable 

如果任何输入是 NULL,或者结果是 0,它将变成 NULL 并通过除法传播。

IIF(DATEDIFF(day, sf.StartDate,sf.EndDate)=0,NULL, sf.TotalPrice
/Convert(Decimal(18,4),DATEDIFF(day, sf.StartDate,sf.EndDate)))

应该可以解决问题

尝试并使用

case 
     when sd.startdate <> sd.EndDate then sf.TotalPrice / DATEDIFF(day, sf.StartDate, sf.EndDate) as DailyAllocatedRevenue
     else sf.TotalPrice
end