cast(CAST(countAta AS float)
/CAST(DATEDIFF(day,@searchDate,@EndDate) AS float) as decimal(16,2)
)
回答
您应该总是使用TRY-CATCH块并使用SQL提供的内置错误处理函数。此外,您可以通过其他方式处理 -
SELECT CASE
WHEN (CAST(DATEDIFF(Day, @searchDate, @EndDate) AS FLOAT) AS DECIMAL(16, 2)) = 0
THEN NULL -- Ideally it should return NULL but you can change it as per your requirement
ELSE CAST(CAST(Counter AS FLOAT)/CAST(DATEDIFF(Day, @searchDate, @EndDate) AS FLOAT) AS DECIMAL(16, 2))
END
这里应该放置别名这样生产效率::: cast(CAST(countAta AS float)/ CAST(DATEDIFF(day,@ searchDate,@ EndDate)AS float)作为十进制(16,2))作为生产力 – vishu
在查询结束。 以生产力结束 –
您可以使用NULLIF来避免被零错误分开。 当分母等于0
CAST(countAta AS decimal(16,2)) /ISNULL(NULLIF(DATEDIFF(day,@searchDate,@EndDate),0), 1)
或者使用CASE WHEN
CAST(countAta AS decimal(16,2))/
CASE WHEN DATEDIFF(day,@searchDate,@EndDate) = 0 THEN 1
ELSE DATEDIFF(day,@searchDate,@EndDate)
END
您可以通过查询之前设置以下参数避免这种情况,它应该工作得很好,它返回NULL。 123/0
重要的一点是,一旦你用这样的操作进行设置这些属性回ON
:
SET ARITHABORT OFF
SET ANSI_WARNINGS OFF
,当你做这样的事情这将返回一个NULL
。当你在你的存储过程中有复杂的查询时,这一点特别有用,并且你不想写更多的CASE
语句来处理这种情况。
希望这有助于!
一个投票从我这里是有用的,我刚刚了解这些功能。 – Coder1991
最好的方法是NULLIF()
。 。 。但你不能把值恢复成0
:
select CAST(CAST(countAta AS float)/
NULLIF(DATEDIFF(day, @searchDate, @EndDate), 0
) as decimal(16, 2)
)
这将返回NULL
如果分母为0。请注意,您不必转换为浮动两次。
- 1. 如何在Linq中处理零除以
- 2. SQL除以零错误
- 3. 解决除以零错误在SQL SELECT
- 4. 如何处理由零异常除法
- 5. 如何处理SQL Agent作业错误?
- 6. 如何处理SQL Azure错误10929?
- 7. 在pl/sql中处理错误
- 8. 如何在swift 3中处理错误?
- 9. 如何在PHP中处理SoapClient错误
- 10. 在这个函数中如何除零除算术错误?
- 11. PL/SQL Oracle错误处理
- 12. SQL事务错误处理
- 13. LINQ to SQL - 错误处理
- 14. ASP SQL错误处理
- 15. JSF和SQL错误处理
- 16. 如何在SQL Server Reporting Services中的错误处理
- 17. AWK除零错误
- 18. 如何处理elasticsearch脚本分区零错误?
- 19. 如何在asp.net中处理“argumentsmentexception未被用户处理”错误?
- 20. 如何处理错误
- 21. 如何处理'simplexml_load_string'错误?
- 22. 如何处理CLI错误
- 23. 如何处理404错误
- 24. 如何处理错误(AbstractRestfulController)?
- 25. 如何处理jsonp错误?
- 26. ServiceStack:如何处理错误?
- 27. 如何处理RapidXml错误?
- 28. 如何处理错误
- 29. 如何处理错误
- 30. 如何处理IE错误
' = 0 then <0 or null> else end'的情况怎么样? –
Utsav