处理 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
我正在使用 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
看到这个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