Tsql 在DATEDIFF计算中处理空值
我正在使用Microsoft SQL Server 2012,并不断遇到错误 遇到被零除的错误 对于下面这样的陈述。如果两个日期相同,我想添加一个空值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 看,这对
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
,而不是产生除以零的错误。