Tsql 在DATEDIFF计算中处理空值

Tsql 在DATEDIFF计算中处理空值,tsql,select,sql-server-2012,datediff,Tsql,Select,Sql Server 2012,Datediff,我正在使用Microsoft SQL Server 2012,并不断遇到错误 遇到被零除的错误 对于下面这样的陈述。如果两个日期相同,我想添加一个空值 SELECT sf.TotalPrice / DATEDIFF(day, sf.StartDate,sf.EndDate) as DailyAllocatedRevenue, sf.TotalPrice FROM sftable 在Sql Server中使用NullIf函数 如果差分返回0,则返回null 看,这对

我正在使用Microsoft SQL Server 2012,并不断遇到错误

遇到被零除的错误

对于下面这样的陈述。如果两个日期相同,我想添加一个空值

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

在Sql Server中使用
NullIf
函数 如果差分返回0,则返回null

看,这对你有帮助

SELECT 

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

FROM sftable 

在Sql Server中使用
NullIf
函数 如果差分返回0,则返回null

看,这对你有帮助

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
,并通过除法传播。

您只需将
DATEDIFF
包装在
NULL中即可

SELECT 

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

FROM sftable 
IIF(DATEDIFF(day, sf.StartDate,sf.EndDate)=0,NULL, sf.TotalPrice
/Convert(Decimal(18,4),DATEDIFF(day, sf.StartDate,sf.EndDate)))
如果任何输入为
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
案例
当sd.startdate sd.EndDate时,则sf.TotalPrice/DATEDIFF(天,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
案例
当sd.startdate sd.EndDate时,则sf.TotalPrice/DATEDIFF(天,sf.startdate,sf.EndDate)作为每日分配的地点
总价格
结束

@Damien,我真的不确定OP是否阅读或理解了您关于NULL传播的警告@我认为零传播实际上是他们想要的一部分。我可能是错的,但我认为他们希望总体结果(对于
DailyAllocatedRevenue
)是
NULL
,而不是产生一个被零除的错误。@Damien,我不确定OP是否阅读或理解了您关于NULL传播的警告@我认为零传播实际上是他们想要的一部分。我可能错了,但我认为他们希望总体结果(对于
DailyAllocatedRevenue
)为
NULL
,而不是产生除以零的错误。